[学习笔记] Java对象和类

Java是一种面向对象语言(Object-oriented  Programming,OOP);

 

面向对象编程

面向对象编程与面向过程编程不同,面向过程编程将模型分解为达到最终结果所需要经过的一步步过程,而面向对象编程将现实世界的事物映射为计算机中的对象;

 

对象和类

Class本身也是一个种数据类型,在Java中定义一个Class(类)就是定义了一种数据;

Class ClassName{
  ……
}

 

类是创建对象的模板,描述一类对象的属性和行为对象是类的实例,拥有属性和行为;

一个类可以包含多个字段,字段就是属性,用于描述类所代表的对象的特征;

通过类可以把一组数据集合到一类对象上,实现数据封装;

 

一个Java源文件可以包含多个类,但只能有一个public类且源文件名必须与被修饰为public的类名一致;

 

实例

实例是对象的实例,它是以类为模板创建的对象;

可以用模板创建多个实例,每个实例的类型相同,但属性会有差异;

每个实例互相独立,拥有各自的同名但不同数据的属性,互不干扰;

 

属性

属性在类中以成员变量的形式定义;

访问实例属性的方式:实例变量名.字段名

 

变量可以分为:局部变量、成员变量和类变量。

局部变量:变量在方法/代码块中定义,方法结束变量也会被销毁;

成员变量 / 实例变量

     在类中的方法体之外定义且无static修饰符修饰的变量;

        变量随对象创建而创建,该变量可以被类中的方法、语句块访问;

        成员变量为对象所独有,不同的对象的成员变量在对象实例化时被分配至不同的内存空间;

类变量 / 静态变量:

       在类中的方法体之外定义且用static修饰符的变量;

       类变量为所有类对象所共享,一旦值发生改变,所有对象获取到的都是修改后的值;

 

成员变量 vs 类变量

定义方式不同:类变量需要用static修饰,而成员变量不用;

调用方式不同:成员变量由对象调用,类变量可以被对象调用,也可以被类调用;

存储位置不同:成员变量存储在堆内存的对象中,数据为该对象特有;

               类变量存储在方法区(共享数据区)的静态区中,是对象共有的数据;

生命周期不同:成员变量的生命周期随对象的创建开始,随对象的回收而结束;

       类变量的生命周期随类的加载开始,随类的消失而结束;

 

成员变量 vs 局部变量

声明位置不同:成员变量在类中的方法之外声明,局部变量在方法或语句块中声明;

初始值不同:成员变量若没有赋值则会根据数据类型产生不同的默认值;

                局部变量则没有默认值,必须先声明并赋值后再使用;

 

在同一个类当中,局部变量可以与成员变量同名,但在方法和语句块中局部变量的优先级高于成员变量,要使用成员变量,需要借助this关键字来指明为当前对象调用该成员变量;

 

this关键字

在方法内部,可以使用隐含的this关键字,它始终指向当前实例;

若在方法中定义的局部变量与实例变量重名,在方法内调用实例变量,需要在变量前加上this关键字说明调用的是实例变量;

 

方法

行为在类中以方法的形式定义,方法可以分为普通方法和构造方法;

方法是语句的集合,是解决一类问题的步骤的有序组合,用于执行一个功能;

 

定义方法的语法:

修饰符  方法返回类型  方法名(方法参数列表){
  //方法语句;
  return 方法返回值;
}

 

方法包含一个方法头和一个方法体;

 

 

访问方法的方式:实例变量名.方法名(参数)

 

构造方法

一个类可以拥有零个或多个普通方法,但每个类都至少有一个构造方法,用于初始化类对象;

 

创建对象时需要同时对对象的属性进行初始化,这个任务就是由构造函数来完成的;

构造方法的名字与类名一致;

相比于普通方法,构造方法没有返回值包括void;

 

若没有显式定义类的构造方法,则Java虚拟机会为该类提供一个默认的无参构造方法;

若定义了有参构造函数而没有定义无参构造函数,编译器不会自动创建无参的构造函数,此时无参的构造方法必须显式的定义;

 

构造方法不能直接被调用,创建对象时,会通过new关键字调用构造方法;

 

方法参数

方法可以包含任意个参数;

通过使用参数可以给方法传递变量值;

调用方法时,必须根据参数的定义依次传递;

 

可变参数

定义可变参数:

类型… 参数名

 

可变参数相当于数组,String...names可以改写为String[] names; 

 

创建对象

Java使用关键字new根据模板类创建对象;

Person per=new Person();

  

对象创建步骤:

声明 -- 声明对象的类型和对象名;

实例化 -- 使用new关键字创建对象;

初始化 -- 调用构造方法为对象进行初始化;

 

new关键字完成的操作:

-- 为对象分配内存空间;

-- 调用构造方法完成对象初始化;

-- 返回一个对象的引用;

 

对象vs引用

对象是根据类创建的具体的实例,会在内存堆中开辟一块存储空间;

引用代表了对象所存放的地址,通过将引用赋一个实例变量,就可以通过这个变量操作实例;

 

package

包用于对类进行分类和管理,包中可以包含多个类;

通过包名可以避免名字相同的类产生冲突;

通过包名、类名组成的完整限定名(包名.类名),编译器可以很容易定位到类;

 

包可以是多层结构,每层结构用 . 隔开;

包没有父子关系,不存在继承关系;

 

package语句

package语句放在源文件首部,用于说明源文件定义在哪个包里;

 

import语句

编写类的源代码时,可以通过import语句提供的路径引用其他包中的某个类从而将其导入;

 

posted @ 2022-05-04 20:21  糖小豆  阅读(48)  评论(0)    收藏  举报