java基础视频笔记--07创建类后编译过程的说明
1、编译过程的说明
- 按说应该先编译XueSheng.java,然后再编译XueShengTest.java但是对于编译器来说,编译XueShengTest.java文件的时候,会自动找XueSheng.class,如果没有,会自动编译XueSheng.java文件,生成XueSheng.class文件。
- 第一种方式:javac XueSheng.java,javac XueShengTest.java
- 第二种方式:javac XueShengTest.java
- 第三种方式:javac *.java
2、对象的创建和使用
-
变量必须先声明,再赋值才能访问,注意:对于成员变量来说,没有手动赋值时,系统默认赋值。
赋的值都是默认值,那么默认值是什么? -
类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0
boolean false
char \u0000
string(引用数据类型) null
引用数据类型 null (null是一个java关键字,全部小写,表示空。是引用类型的默认值。)
-
什么是实例变量:对象又被称为实例,实例变量实际上就是:对象级别的变量。
public class 明星类{ double height; //属性来源于状态 }身高这个属性所有的明星对象都有,但是每一个对象都有“自己的身高值”。假设创建10个明星对象,height变量应该有10份。
所以这种变量被称为对象级别的变量。属于实例变量。实例变量在访问的时候,必须先创建对象。
-
对象和引用的区别:
对象是通过new 创建出来的,存储在堆内存当中,同时对象当中又存储了相应的实例变量
引用,
student s1 = new student();其中这个s1是main域中的局部变量,同时也是引用(引用:储存的是对象在堆内存中的地址的变量) -
引用的语法:引用.实例变量名, 例如:
s1.name = "张三"。 -
引用不一定是局部变量,实例变量(成员变量)也可能是引用。
3. 关于u.addr.city的理解
public class Test{
public static void main(String[] args){
// 家庭住址对象
Address a = new Address();
a.city = "北京";
a.street = "大兴区";
a.zipcode = "121221";
// 用户对象
User u = new User();
System.out.println(u.id); // 0
System.out.println(u.username); // null
System.out.println(u.addr); // null
u.id = 11111;
u.username = "zhangsan";
u.addr = a;//怎么理解这一行代码,u.addr , addr这个实例变量是Address类型的
//u.addr = “数据”,这个数据应该填什么,应该保证这个数据是Address类型的, a就是Address类型的
// 思考一个问题:
// 我想知道zhangsan他是哪个城市的,代码应该怎么写?
System.out.println(u.username + "是"+u.addr.city+"城市的!");
// u.addr.city 这行代码可否拆分呢?u.addr.city 节省变量。
// 拆分成以下代码和以上效果完全相同,原理完全相同,不同的是以下代码多了两个变量。
Address ad = u.addr;
String zhuZhi = ad.city;
System.out.println(zhuZhi);
内存图:

4.空指针异常
public class T{
A o1; // 成员变量中的实例变量。必须先创建对象,通过“引用”来访问。
public static void main(String[] args){
D d = new D();
C c = new C();
B b = new B();
A a = new A();
T t = new T();
//这里不写代码会出现NullPointerException异常。(空指针异常。)
c.o4 = d;
b.o3 = c;
a.o2 = b;
t.o1 = a;
// 编写代码通过t来访问d中的i
//System.out.println(T.a); //错误的。
System.out.println(t.o1.o2.o3.o4.i);
}
}
class A{
B o2;
}
class B{
C o3;
}
class C{
D o4;
}
class D{
int i;
}
-
![image-20210312172558025]()
-
在java语言中,垃圾回收器主要针对的是堆内存。当一个java对象没有任何引用指向该对象的时候,GC会考虑将该垃圾数据
释放回收掉。
-
出现空指针异常的前提条件是?"空引用"访问实例【对象相关】相关的数据时,都会出现空指针异常



浙公网安备 33010602011771号