day11
1.空指针异常---
--属于运行错误-java.long.NullPointerException
--原因:当引用名称的值为null时,就不能访问某个对象中的属性或方法
热锅非要访问这就出现空指针异常
--解决办法:在访问某个对象中的属性或方法之前必须保证该引用
名称中存放的是对象的地址(引用)
2.当一个对象中的属性是引用类型案例
/* 编程完成如下要求: 班级类: 属性:编号,名称,地址 定义:无参构造方法,有参构造方法 定义方法:显示班级的信息 学生类: 属性:学号,姓名,性别,年龄,所在班级 定义方法:显示学生的信息(学号,姓名,性别,年龄,班级编号,班级名称) 注意:所在班级应为班级类的类型 测试类: 通过有参构造方法,创建班级对象 通过无参构造方法,创建学生类对象 调用显示信息的方法显示学生的信息 */ Class Grade{ int num; String name; String address; //构造方法 public Grade(){ } public Grade(int num,String name,String address){ this.num=num; this.name=name; this.address=address; } //方法:显示班级的信息 public void show(){ System.out.println("班级编号:"+num+" 班级名称:"+name+" 班级地址:"+address); } } //编写学生类 class Student{ int id; String name; char sex; int age; Grade g=new Grade;//注意:g没有赋值时,则默认为null //不会包异常,班级编号显示0,名称null public void showInfo(){ System.out.println("学号信息如下"); System.out.println("学号:"+id+" 姓名:"+name+" 性别:"+sex+" 年龄"+age+" 班级编号"+g.num+" 班级名称"+g.name); } } //测试类 class Test{ public static void main(String[] args){ //通过有参构造方法,创建班级对象 Grade grade=new Grade(432,"java基础","四楼"); //通过无参构造方法,创建学生类对象 Student s=new Student(); //调用显示信息的方法显示学生的信息 s.showInfo(); } }
3.当一个对象中的属性是引用类型内存分析
4.对用户自定义类型的属性赋值方法
class Student{ //构造 public Student(){ } public Student(int id,String name,char sex,int age,Grade g){ this.id=id; this.name=name; this.sex=sex; this.age=age; this.g=g; } } //测试类 class Test{ public static void main(String[] args){ //通过有参构造方法,创建班级对象 /*Grade grade=new Grade(432,"java基础","四楼"); //通过无参构造方法,创建学生类对象 Student s=new Student(); //调用显示信息的方法显示学生的信息 s.showInfo();*/ //创建学生对象同时对学生中多有的属性赋值 Student s2=new Student(1001,"李四",'男',21,new Grade(324,"java","hahah")); s2.showInfo(); } }
5.为什么要封装
--有些属性不符合实际意义,在赋值之前进行判断,当前值如果合法进行赋值
否则不惊醒赋值
6.面向对象的三大特性
封装--继承--多态---还有一个抽象
7.封装操作步骤
--定义:隐藏类的内部信息,不允许外部程序终结访问,
而是通过方法进行操作
---封装操作步骤
class Student{ String name; //第一步:讲属性设置为私有的private,只能在本类中使用 int age; char sex; //编写对应属性的赋值setXXX和get取值方法 public void setAge(int age){ //将局部变量的值赋给成员变量 this.age=age; } public int getAge(){ return age;//表示返回成员变量age的值 } } //编写学生测试类 class StudentTest{ public static void main(String[] args){ //实例化学生 Student s=new Student(); s.name="张三"; /* 通过运行发现问题: 有些属性,如年龄,性别,不符合实际意义 解决办法: 有些属性不符合实际意义,在赋值之前进行判断,当前值如果合法进行赋值 否则不进行赋值 */ s.age=1234; s.sex='a'; System.out.println("姓名:"+s.name+" 年龄:"+s.age+" 性别:"+s.sex); s.setAge(123456); System.out.println("年龄:"+s.getAge()); }
}