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+"\n班级名称:"+name+"\n班级地址:"+address);} } //编写学生类 class Student{int id;String name;char sex;int age;Grade g=new Grade;//注意:g没有赋值时,则默认为null//不会包异常,班级编号显示0,名称nullpublic void showInfo(){System.out.println("学号信息如下");System.out.println("学号:"+id+"\n姓名:"+name+"\n性别:"+sex+"\n年龄"+age+"\n班级编号"+g.num+"\n班级名称"+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+"\n年龄:"+s.age+"\n性别:"+s.sex);s.setAge(123456);System.out.println("年龄:"+s.getAge());}
}