五(一)、类&对象概述

面向对象学习的三条主线

  1.java类及成员变量;类的成员:属性、方法,构造器、代码块,内部类

  2.面向对象的三大特征:封装性、继承性、多态性

  3.其他关键字:this super static final abstract interfae package import

 一、面向对象:简言之,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做;

  1.在Java语言范畴中,我们将功能、结构等封装到类中,通过实例化来调用具体的功能结构;
  2.涉及到java与前端语言,后端的数据库交互时,前后端的结构在Java层面交互,都体现为类、对象;

① 面向对象和面向过程的区别: 例如:人把大象装冰箱

    面向过程:1.把冰箱门打开 2.抬起大象 3.塞进冰箱 4.关闭冰箱门

    面向对象:创建3个类:人、大象 冰箱;

       人: 打开和关闭冰箱门 和抬起大象;

       大象: 进入冰箱,

       冰箱:有打开 和关闭

     人{

       打开(冰箱门){

        冰箱.开开()

        }

        抬起(大象){

        大象.进入(冰箱)

       }

        关闭(冰箱门){

           冰箱。关闭()

        }

      }

  

     冰箱{

       开开(){

        }

      关闭(){

        }

      }

    大象{

       进入(冰箱){

      }

     }

  

  二、类和对象的区别:

 ①类:对事物的描述 是抽象的、概念上的定义;比如 人;

 ②对象:是实际存在的该类事务的每个个体(即 在内存中存在的,占据内存空间) 因而也称为实例(instance) 比如 小明;

  1.面向对象程序设计,重点是类的设计

  2.设计类,就是设计类的成员

  3.如果创建了一个类的多个对象,每个对象独立的拥有类的属性;(非static)意味着,如果修改一个对象的属性a,则不影响另外一个属性a的值

  

三、  类和对象的使用

  1.创建类,设计类的成员

  2.创建类的对象

  3.通过对象 对象.属性 对象.方法 调用对象的结构

 1 //人的一个类
 2 class Person{
 3     //属性(成员变量)field
 4     String name;
 5     int age = 1;
 6     boolean isMale;
 7     //方法(成员方法)method
 8     public void eat() {
 9         System.out.println("人可以吃饭");
10     }
11     
12     public void talk(String lanuage) {
13         System.out.println("人可以说话,使用"+lanuage+"语言。");
14     }
15 }
 1 //使用类 创建类的实例化
 2         public static void main(String[] args) {
 3             //使用类
 4             Person person = new Person();//创建对象
 5             person.name = "tom";//调用属性
 6             person.isMale = true;
 7             System.out.println(person.name);
 8             person.talk("中文");//方法的调用
 9             
10             Person person1 = new Person();//创建对象
11             System.out.println(person1.name);
12             
13             Person person2 = new Person();//创建对象
14             person2 = person;//将person对象的地址值赋值给了person2;
15             System.out.println(person2.name);
16             person2.age = 10;
17             System.out.println(person.age);
18             
19         }

  对象的内存解析:

  

 四、 类中属性的使用:

  属性(成员变量) vs 局部变量

  1.相同点:定义变量的格式;都有对应的作用域;先声明后使用;

  2.不同点:

     2.1在类中声明的位置不同

     2.2属性直接定义在类的一对{}中;局部变量:声明在方法内,方法形参 构造器形参,构造器局部变量

     2.3权限修饰符:可以在声明属性时,指明权限修饰符,常用修饰符:private public 缺省 protected 局部变量 不可以使用权限修饰符;

     2.4 默认初始化值,类的属性根据其类型都有默认初始化值(整型(byte short int long)默认0;char 默认 0 浮点型 0.0,Boolean false 引用数据类型 (对象 数组 接口):null);局部变量没有默认初始化值;

   局部变量没有默认初始化值,必须赋值;形参在调用的时候赋值;

  

五、类中方法的使用

  方法:类应该具有的功能;比如 Math.random();Arrays.sort();....

  public void eat() {

    System.out.println("人可以吃饭");

  }

  public void talk(String lanuage) {

    System.out.println("人可以说话,使用"+lanuage+"语言。");

  }

  public String getName(){}

 

1.1方法的声明:

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

    方法体

    };

  1.1.1 权限修饰符 private public 缺省 protected

  1.1.2 返回值类型 有返回值、没有返回值;

    ①若有返回值,在声明时需要指定返回值类型,在方法中使用return 返回指定类型的变量or常量

    ②若方法没有返回值,则方法声明时使用void来表示,通常没有返回值的方法中,就不用return返回;如果只用 只能 "return;"表示结束此方法;

  1.1.3 我们定义方法该不该有返回值?凭经验;

  1.1.4方法名 属于标识符;需要遵循标识符规范;

  1.1.5 形参列表:方法可以声明0个 1个或者多个形参;格式:数据类型1 形参1,数据类型2 形参二;

  1.1.6 方法体:方法功能的体现;

 补充:

编译后生成字节码文件,我们使用jvm中的类的加载器和解释器对生成的字节码文件进行解释运行;意味着,需要将字节码文件对应的类加载到内存中,才涉及到内存解析。

虚拟机栈 即平时说的栈,我们将局部变量存储在栈结构中;堆:我们将new出来的结构存放在堆空间中 比如 数组,对象(这里指的是非static)。

方法区:类的加载信息,常量池,静态域

原文地址:https://www.cnblogs.com/lixiuming521125/p/13303995.html