实例方法
可能不太准确,但是先这样去记忆
实例方法 = 对象方法 = 没有添加static关键字
调用实例方法 = new 一个对象再去调用
演示代码一
Vip.class
package chapter3.oop02;
public class Vip {
//类 = 属性(状态) + 方法(行为)
//姓名
String name; //实例变量(对象变量)
//年龄
int age; //实力变量(对象变量)
//会员行为
//购物行为
//通常描述一个对象的行为动作时,不加static
//没有添加static的方法,被叫做实例方法(对象方法)
//必须需要一个对象才能执行
public static void shopping(){
//加staic才能用VIP类去调用
//否则必须new一个对象去调用
System.out.println("正在购物");
}
}
VipTest.class
package chapter3.oop02;
public class VipTest01 {
public static void main(String[] args) {
//创建一个vip对象
Vip vip1 = new Vip();
vip1.name = "momo";
vip1.age = 20;
System.out.println("name =" + vip1.name);
System.out.println("name =" + vip1.age);
//再创建一个Vip对象
Vip vip2 = new Vip();
vip2.name = "fangfang";
vip2.age = 16;
System.out.println("name =" + vip2.name);
System.out.println("name =" + vip2.age);
//去购物
//实例方法需要使用“引用.”来调用
vip2.shopping();
Vip.shopping();
/*
为什么name和age不能使用“类名.”访问?
实例变量如果需要访问,必须先new对象,通过引用来访问实例变量
实例变量不能通过类名来直接访问
*/
// System.out.println(Vip.name);
}
}
演示代码二
animal.class
package chapter3.oop03;
/*
宠物类
*/
public class animal {
//名字
String name;
//生日
String birth;
//性别
char sex;
//行为动作
//吃
public void eat(){
System.out.println("宠物在吃东西");
}
//跑
public void run(){
System.out.println("宠物在运动");
}
}
package chapter3.oop03;
public class animalTest01 {
public static void main(String[] args) {
//创建宠物对象
animal dog = new animal();
dog.name = "放放";
dog.birth = "2020.3.16";
dog.sex = '男';
//读取属性的值
System.out.println("狗狗的名字" + dog.name);
System.out.println("狗狗的生日" + dog.birth);
System.out.println("狗狗的性别" + dog.sex);
animal rabit = new animal();
rabit.name = "一一";
rabit.birth = "2020.3.16";
rabit.sex = '女';
//读取属性的值
System.out.println("兔子的名字" + rabit.name);
System.out.println("兔子的生日" + rabit.birth);
System.out.println("兔子的性别" + rabit.sex);
}
}
空指针异常
引用 一旦为null ,便是引用不再指向对象了。
但是通过引用访问name属性,编译可以通过。
运行时出现异常:空指针异常。NullPointerException是一个著名的异常
为什么会出现空指针异常?
因为运行的时候会找真正的对象,如果对象不存在了就会出现这个异常。
package chapter3.oop03;
public class animalTest02 {
public static void main(String[] args) {
Animal dog = new Animal();
dog.name = "放放";
dog.birth = "2020.3.16";
dog.sex = '男';
//读取属性的值
System.out.println("狗狗的名字" + dog.name);
System.out.println("狗狗的生日" + dog.birth);
System.out.println("狗狗的性别" + dog.sex);
dog = null; //编译时不报错,运行时出错(空指针异常)
System.out.println(dog.name);//空指针异常
}
}
在执行代码之后
dog = null;
dog引用(dog局部变量)保存的地址 0x12 (指向堆内存中pet实例对象) 变为 null地址