2.类和对象的定义与使用( 三 )


4.3 构造方法的初始化
构造方法的初始化一种有两种方式:默认初始化和就地初始化
1.默认初始化
public class Date {public int year;public int month;public int day;public Date(int year, int month, int day) {// 成员变量在定义时,并没有给初始值, 为什么就可以使用呢?System.out.println(this.year);System.out.println(this.month);System.out.println(this.day);}public static void main(String[] args) {// 此处a没有初始化,编译时报错:// Error:(24, 28) java: 可能尚未初始化变量a// int a;// System.out.println(a);Date d = new Date(2021,6,9);}}
要搞清楚这个过程,就需要知道 new 关键字背后所发生的一些事情
Date d = new Date(2021,6,9);
在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突
数据类型
默认值
byte
char
'\u0000'
short
int
long
0L
false
float
0.0f
0.0
null
4. 初始化所分配的空间
5. 设置对象头信息(本文暂不介绍)
6. 调用构造方法,给对象中各个成员赋值
2.就地初始化
在声明成员变量时,就直接给出了初始值 。
public class Date {public int year = 1900;public int month = 1;public int day = 1;public Date(){}public Date(int year, int month, int day) {}public static void main(String[] args) {Date d1 = new Date(2021,6,9);Date d2 = new Date();}}
注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中
5.封装
何为封装呢?简单来说就是套壳屏蔽细节
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互
为什么要封装?
封装是出于对代码的安全性考虑
5.1 访问限定符
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用 。Java中提供了四种访问限定符:
范围
同一包中的同一类




同一包中的不同类



不同包中的子类


不同包中的非子类

:公共的,在当前程序(项目)中都是可见并且可以使用的
:默认的,对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
:受保护的,继承访问权限
:私人的,只在当前类可见,出了类{ },对外就完全隐藏了,外部不知道有其存在
这里主要说这个访问限定符
class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void sleep(){System.out.println(this.name+"正在睡觉");}}public class Test {public static void main(String[] args) {Student student=new Student("张三",10);//当name和age被private修饰后这么做会报错//student.name="李四";//student.age=18;//正确做法:student.setName("李四");student.setAge(18);System.out.println(student.getName());}}