java基础day11---空指针异常----引用类型--自定义类型赋值--封装

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,名称null
    public 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());
    }


}

猜你喜欢

转载自www.cnblogs.com/fdxjava/p/10644414.html