zoukankan      html  css  js  c++  java
  • 6 面向对象之类和对象

    1 面向对象和面向过程的区别

      两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。

    区别:

      1)编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。

      2)封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。

      3)面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。

    2 类和对象

      对象:客观存在的实体(一个具体的事物)。

      类:具有相同特征和共同行为对象的集合。是人类脑海中一个抽象的概念,代表的是一种"共性".

      类中的成员:1.成员属性(描述外部特征) 2.成员方法(描述功能行为)

    3 定义和访问类

      1)定义一个类:

        [修饰符] class 类名{

           //1.属性的定义:与定义变量类似

            [修饰符] 数据类型 属性名;

            //2.方法的定义

           [修饰符] 返回值类型 方法名(形参列表){

            //方法体;

            }

         }

    2)访问类中成员

      a.访问属性:

           创建对象(创建实例):类名 对象名 = new 类名();

               赋值: 对象名.属性=值;

        属性(成员变量):作用域范围是在整个类体.

      b.调用方法

          静态方法(使用static修饰的方法):类名.方法名()

          普通方法(非static修饰的方法):对象名.方法名();

    4 变量的作用域

      变量声明的位置不同会导致其作用域不同。

      局部变量:在方法内部声明的变量,其作用域仅限于当前方法使用。

      成员变量:在类中声明的属性,其作用域可以在当前类中使用。

    区别:

       1.作用域不同:成员变量的作用域是在整个类体,局部变量的作用域在当前方法

       2.是否有默认初始值:成员变量是有默认的初始值,局部变量没有默认初始值。

          eg:int类型默认初始值为0  double类型默认初始值为0.0  boolean类型默认为false String默认为null

       3.是否能使用修饰符(public/private/protected/默认):成员变量:可以添加public等修饰符,局部变量不能。

       4.在内存中保存的位置不同:成员变量保存到堆中,局部变量保存到栈。

    5构造方法

      构造方法(构造器):是一种特殊的方法,主要用于为成员变量初始化(为成员变量赋初始值)。

    特征:

      1.方法名必须与类名相同。

      2.没有返回值类型。void也是一种返回值类型。

      构造的作用:为成员变量赋初始化值。

      语法: [修饰符] 类名([形参列表]){

      

            }

      构造方法使用new关键字进行调用。

      如果没有显式定义构造方法,虚拟机会自动添加无参构造,但是一旦显式定义了构造方法,虚拟机在编译时将不同添加无参构造(默认无参构造失效),如果需要调用无参构造就必须自己定义。

      构造方法是可以重载(方法名相同,参数列表不同)。

    6 this关键字

      this关键字:代表当前对象本身

       1)用于区分成员变量和局部变量。

       2)可以使用this访问当前对象的成员变量和成员方法(可以使用this调用属性和方法)  this.方法名()或this.属性

       3)可以使用this调用构造方法,必须作为构造方法的第一行语句。

      public Dog(String name,String bland,int age){

        this.name=name;

        this.bland=bland;

        this.age=age;

      }

      public void test(){

      }

      this.name ;访问属性

      this.test(); 调用方法

    7 值传递和引用传递

      数据类型可以分为基本数据类型和引用数据类型

      如果将基本类型作为方法参数属于值传递:方法执行结束后不会保留执行结果。

      如果将引用数据类型作为方法参数,属于引用传递,方法执行结束后会保留执行结果。

    8 内存结构

      1)

       在方法中声明的局部变量保存在栈中,方法执行结束后栈中数据会被回收

      2)堆

       堆中保存的是对象的信息,使用new关键字创建的对象信息。堆中信息会被java的垃圾回收器回收。

      3)方法区

       保存的是类的信息(代码)、静态(static)变量、字符串常量等。

    9 static关键字

      1)static修饰的变量为静态变量,类变量

        访问方式:  类名.变量名(推荐)    对象名.变量名

       ①成员变量和全局变量的区别:

          a.在计算机内存中保存的位置不同:

           成员变量保存在堆中,全局变量保存在方法区

          b.保存的份数不同

           成员变量每new一次都开辟空间,保存多份。

           全局变量只有1份

          c.访问方式不同

           成员变量: 对象名.属性,可以使用this关键字。

           全局变量: 类名.属性(推荐) 对象名.属性    

          d.创建时间不同:

           成员变量:只有使用new关键字创建对象时才会在堆中为其分配空间

            全局变量:在类加载时在方法区中分配空间。

      2)使用static关键字可以修饰方法:静态方法或类方法

        特点:静态方法中无法访问非静态的成员变量或方法;但非静态的方法中是可以访问静态的成员

        访问方式: 类名.方法名(推荐) 对象名.方法名

      3)使用static修饰代码块,静态代码块

          语法:static{

             //代码

             }

         执行过程:在类加载时执行静态代码块。静态代码块>普通代码块>构造方法。只会执行1次。

       

       代码块:使用花括号包含的代码。使用比较少。不需要显式调用。

       代码块的执行顺序:在创建实例时执行。代码块在构造方法之前执行,并且按照顺序执行,每创建一个对象就会执行1次。执行多次。

        类中代码的执行顺序: 静态代码块>代码块>构造方法>静态方法或实例方法。

      静态的方法中只能访问静态变量, 非静态的方法可以访问静态或非静态的变量

    10 package和import关键字

      1)package关键字主要用于声明包。

       java中的包:类似文件夹

       作用:1.分门别类进行存放数据,方便分类和管理。2.避免命名冲突。

       包的命名规范:所有字母都是小写,多级包名之间利用.进行分割

      java中常见的包: java.lang包之外的其他包下的类,使用时需要导包。

       * java.lang包:java核心类库,String,System,Math... 该包下的类可以直接使用,无需导包。

       * java.util包:工具类。 Arrays,Scanner...

       * java.io包:i(input)/o(output)和java中流的输入和输出相关的类库。

       * java.net包:网络编程相关的类库。

       * java.sql包:与数据库操作相关的类库。

       * java.text包:国际化或格式化输出相关的类库。

       * java.awt包/javax.swing包:图形化界面相关的类库

     

       * 声明包:使用package关键字,必须放在该类的第一行。

       * 语法: package 包名;  eg:cn.zzsxt.oop7;

      2)导入包: import关键字,在使用非当前包下的其他包下的类时需要导包

         方式一: import 包名.*;将整个包导入。 eg: import cn.zzsxt.oop6.*;

         方式二(推荐): import 包名.类名; eg:import cn.zzsxt.oop6.TestStatic;

      

       *直接使用全类名进行访问: 包名.类名;

          cn.zzsxt.oop6.TestStatic testStatic = new cn.zzsxt.oop6.TestStatic();

       *特殊场景:不同的包下存在相同的类名。

           import java.util.*;

           import java.sql.*;

         java.util.Date date = new java.util.Date();

      3)静态导入

        package cn.zzsxt.oop7;

        import static java.lang.Math.*;

        import static java.lang.Math.PI;

        import static java.lang.Math.random;

        静态导入:JDK1.5之后的新增特性。

        语法: import static 包名.类名;

        作用:如果使用静态导入某个类或类中属性和方法,可以直接使用该类中的静态属性或静态方法。

        System.out.println(Math.PI);

         double rand = Math.random();

         System.out.println(rand);

         System.out.println(PI);//使用java.lang.Math类中的静态属性

        System.out.println(random());//使用java.lang.Math中的静态方法

     

    }

  • 相关阅读:
    使用kbmMW#1轻松实现REST
    kbmMW集成JWT
    kbmMW TkbmMWHashSHA256与Delphi 10.2 THashSHA2算出相同的结果
    REST easy with kbmMW #14 – DB Controlled login
    java的三种随机数生成方式
    Java中如何获取一个类中泛型的实际类型
    java格式化时间到毫秒
    Java Base64Utils ----Utils
    file 从InputStream读取byte[]示例
    Java四种引用类型
  • 原文地址:https://www.cnblogs.com/nicepanda/p/6965082.html
Copyright © 2011-2022 走看看