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()); }
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?