ningbaoer

导航

0412下午

0412
今日课程
stati
static String country = "CN";
前面放static 数据 ,将直接在数据区加载。
static :是一个修饰符 表示静态的
(成员变量是私有数据)
特点:
1.被static 修饰的成员 会随着字节码一起加载,优先对象的存在
(加载完字节码 就开始扫描有没有静态的)
2.static修饰的是共享数据,是被该类型的所有对象共享的
3.访问方式多了一种:
老方式new
新方式 : 类名 . 成员名
System.out.println(s1.country);
System.out.println(s2.country);
当 s1.country = "华夏";
System.out.println(s2.country);
那么再输出S2的时候也是 华夏
共享数据 ,无论谁改动 就享受相同结果

什么时候使用static?
1.什么时候修饰变量:当变量为共享数据的时候 就可以使用static修饰,
2.什么时候修饰函数:当函数没有访问非静态成员时,就连可以用static修饰
例如 toSrtingstatic不能用statci,因为toString要访问name ,age呀都是非静态的,所以不能修饰toString

static的弊端
1.访问出现局限性 静态成员不能访问非静态成员,非静态成员可以访问静态成员
静态成员 先于非静态成员的加载 ,new还没执行,非静态成员当然也没有执行,所以不存在就没办法访问
静态成员加载在数据区 JVC不会清理数据区,所以静态成员会一直存在,当数据区静态成员越来越多的时候,就会才生卡顿,
开发的时候尽量少使用
2.生命周期过长

静态代码块
static {
System.out.println("");
}
上面为静态代码块
作用:为类进行初始话
{
System.out.println("");
}
上面为构造器代码块

输出顺序 :
1.静态成员(字节码一起执行,执行一次)
2.构造器之前,先执行 构造代码块
3.最后输出 (调用什么函数 输出什么函数,比如赋值了就是调用带参的,没赋值就是调用空参)

JVM执行顺序
Person p = new Person();

1.将类的字节码文件 Person.classs 加载到数据区,所有静态成员完成加载(从上往下)。
2.new 在堆里开辟空间
3.成员变量默认初始化
4.成员变量显示初始化
5.构造代码块 初始化
6.构造器 初始化
7.堆 内存 开始分配地址值
8.在栈内存中为 局部变量 p 开辟空间,接收堆内存的地址值,初始化结束

数据传递
一个数据 变量
多个同类型 数组
多个不同类型 对象
多个对象 集合/对象数组

继承:

继承:关键字 extends 子类可以获取父类中所有的非私有成员,
父类:公共成员 所在的类 称为父类,
子类:被抽取公共成员的类,称为子类。

注意:不能为了获取某一个功能 ,而去继承一个类
只有当B是A 的一员时,A才能继承A

Object 类 :是所有类的父类/根类/超类
java中 类与类的关系:单继承关系,支持多层继承(一个类只能有一个直接父类)
如果一个类没有声明定义自己的父类,那么这个类默认继承Object类,

体系的学习:
先学习父类,创建子类对象来使用,(原因:子类的功能比父类强大)

父类对子类的影响
1.成员变量
2.成员函数
3.构造器

1.成员变量
01子类父类成员变量重名
super :父类对象的引用,用法与this一样
总结
局部变量 num,
成员变量 this. num
父类成员变量 super.num


2.成员函数

02重写 overide /覆盖/重写(当子类中存在和父类一摸一样的函数的时候,子类函数会改写父类函数的功能)
但是有特例
1.子类函数的权限 要大于等于 父类函数
private default(默认) protected(受保护的) public
2.返回值 子类函数的返回值类型,可以是父类返回值的子类
Number 类是 integer 类的父类

3.子类函数在声明异常的时候,异常范围要小于等于父类,
Exception :异常的父
父类声明异常 public void m3 (){throws Exception}
子类声明异常可以完全继,或者小异常,或则解决。public void m3 (){throws RuntimeException}
RuntimeException(运行异常 )
异常来说 从父类到子类 异常范围越来越小,功能越来越大

子类对父类重写的时候,类型要一样 父类int ,String 子类也要int, String

如果子类想在父类函数的基础上进行功能的延申,可以用super函数,来调用父类的功能
例如:父类m1函数
子类 super.m1()

3.构造器

子类在被创建对象的时候,默认访问父类中的空参构造器,查看可以获取的数据。
每一个子类的第一条语句,默认为:super()
super. 区分父类子类成员变量
super()
如果父类没有空参构造器,那么子类需要通过super()指明访问父类中的哪个构造器

关键字:final
1.final是一个修饰符 ,表示最终的,可以用来修饰类 函数 变量
2.final 修饰的类 是最终的类: (最终的类 没有子类)不能被继承
3.final 修饰的函数 是最终的函数,可以被调用,但是不能被重写
4.final 修饰的变量 是常量 ,只能赋值一次,
(通常都这样使用 public static final )
5.在局部内部类中,可以访问 由fianl修饰的局部变量

 

posted on 2023-04-12 16:58  宁宝儿  阅读(41)  评论(0)    收藏  举报