一 类
1.定义:将生活中的事物根据需要提取某些特性和方法,利用计算机语言将其定义(抽象过程)出来的称为类,即抽象地表示现实事物的一种方式,便于计算机进行识别
注:具体要从现实事物中抽取什么属性取决于要解决的现实问题
2.内容:
区别于C语言的结构体:类既有属性又有方法,结构体只包含属性
3.作用:实现代码的高内聚(即有关联的代码放在一起,方便之后维护)
4.注意事项:
(1)类名要使用大驼峰
(2)有main方法的类一般要被public修饰
(3)在本类中成员方法可以直接使用成员属性,在不同类中则需要先创建该类的对象,再通过引用去进行访问
二 对象
1.定义:基于自定义类的类型创建出的变量即为对象,也称为实例,其创建的过程称为实例化
2.内存中分配:其new出来的对象存放于堆上,其在堆上的地址存放于其所创建出来的引用类型中,并且该引用类型存放于栈上
3.特性:
(1)实例属性是每个对象独有一份,每创建一个对象就有一份对应的属性
(2)但方法不是每个对象都独有一份,其统一存放于方法区上,为所有成员共用根据其this引用,来决定其对应的成员属性调用谁的
三 this引用
1.解决的问题:
(1)当形参与成员变量重名
(2)方法调用知道要调用的对应是谁的成员变量
2.本质:指向调用该方法的当前对象,哪个对象调用,就为哪个对象的引用类型
例如 Date date=new Date();
date.set();
此时是new Date()这个对象调用,则this对应即为new Date()这个对象的引用类型,其性质与date差不多
3.特性:
(1)static方法中不存在this,其为公用的,为类方法,无需创建实例也能实现,所以不可以有成员变量和成员方法的存在
(2)this为成员方法的第一个隐藏参数,由编译器自动传递,调用相当给this赋值了该对象在堆区上的地址
(3)this的内容是死的,其不为变量,不能修改,不能赋值
四 对象的构造和初始化
1.初始化的方式
(1)构造方法
(2)默认初始化
(3)就地初始化
(4)代码块初始化
2.构造方法
(1)作用:用于在创建对象的时候顺便初始化对象中的成员变量(仅完成初始化这个作用)
(2)要求
(i)四要素:要求不能返回值,一般为public修饰,少数特别情况使用private,名字必须与类名相同
(ii)方法重载:可以方法重载,也可以利用this在一个构造方法中调用另一个构造方法,但只能单向调用,双向调用会成环
(3)特点
(i)关于无参构造方法:如果用户不显示定义编译器会自动生成一个无参版本的构造方法,如果编译器显式定义,则不会生成
(ii)调用:无需手动调用,在创建对象时会由编译器自动调用,并且在对象的生命周期中只会调用一次
(4)自动生成:idea中按alt+ins+(fn)->Constructer选择中要初始化的变量按回车
3.默认初始化
(1)情况:仅创建变量,没有给它初始化时,JVM会自动给对象中的变量赋默认值
注:这也是为什么局部变量必须初始化才能使用,而对象中的变量可以不用原因
(2)补充:
创建对象时JVM的工作
(i)判断对象对应类是否已经加载,没有则加载类
(ii)为对象在堆上分配空间
(iii)处理并发安全问题
多个线程同时申请对象,JVM要保证给对象分配的空间不冲突
(iv)初始化所分配的空间(默认初始化)
(v)设置对象头信息,调用构造方法
4.就地初始化:在创建变量的·同时赋初值
5.代码块初始化:使用{}赋初值
6.初始化方法的先后顺序
就地初始化 >代码块初始化>构造方法初始化
并且前面执行的会被后面执行的所覆盖掉
五 对象的打印
1.目的:直接打印对象对应的引用就可以打印出对象中的对应内容
2.实现方式:在该类中重写toSring方法
注:toString是一个特殊的方法,重写之后打印对象的时候,编译器会自动调用toString方法,把对象转为String类型
补充:重写时可以使用注解来标明,标明后编译器会对其做更严格的检查
注解:相当于对这个方法和类做了一些更严格的补充说明,编译器之后会对其进行更严格的检查
3.要求:
(1)其返回类型必须为String
(2)方法名必须为toString