Java学习笔记1--静态和非静态,多态下初始化

静态与非静态变量区别就在于一个是类独有
他存在于特殊的方法区或者叫共享数据区 是所有对象共有
然后
静态 只 能被静态所调用
非静态 静态非静态均可以访问
静态方法不可以用 this super 可以用类名直接调用
非静态方法一定需要对象去调用用

类是占内存的 这肯定的

函数是否用静态函数修饰 参考一点就是该函数是否有功能访问到对象中的特有数据

即是指该功能是否需要访问非静态的成员变量,如果需要,这就是非静态的
如果不需要就是静态的 当然也可以非静态的
但非静态需要被对象调用,而仅创建对象调用非静态却没有访问特有数据的方法 对象创建无意义
 
 静态代码块
 随着类的加载而执行 而且只执行一次
 作用
     用于给类进行初始化
     比如要给静态变量没赋值 可以在静态代码块进行赋值或者对这个静态变量多次运算
 我们都知道java有类 类中有main函数
 如果main函数前面还有个静态代码块 谁先?
 当然是静态代码块 类只要进内存 就执行了
 既然有静态代码块static{}

 那么对象肯定也有代码块 非静态代码块{}
 全名构造代码块 可以给所有对象进行初始化的

 区别:构造函数是给对应的对象进行针对性的初始化
 而构造代码块是给所有对象进行一个泛化的初始化

 函数内加了个{}叫局部代码块
 限制局部变量的生命周期
 执行先后顺序静态代码块--->构造代码块-->构造函数


 一个对象中的方法如果没有访问到私有数据的话
 使用非静态修饰纯粹浪费空间 那么就使用静态修饰一个没有访问私有数据的方法
 这样的话当我们使用要给数组工具类的时候
 就不必要建立一个对象并分配内存 直接类名.方法 就可以访问了
 然后既然一个类他就是一个工具类 里面都是静态方法
 那么我们根本不需要实例化这个类 可不可以强制抑制实例化对象
 根本不让你创建 针对构造函数 下手 对构造函数私有化
 如果不让构造不就不能初始化 private ArrayTool(){}即可
 

 多态下的初始化:
  在其他任何实话发生之前 将分配给对象的才能出空间初始化为二进制的0
  调用基类构造器 这个步骤不断反复递归下去  首先是构造这种层次的根 然后是下一层导出类
  按声明顺序调用成员的初始化方法
  调用导出类构造器的主体
 由于初始化为0这个特殊的情节 所有 当在一个构造器的内部调用正在构造的对象的某个动态绑定方法时 他会调用导出类被覆盖的方法 但是要知道他所引用的变量值为0

 构造器准则 用尽可能简单的方法使得对象进入正常状态 如果可以的化 尽量避免调用其他方法  
 在构造器内唯一能够安全调用的那些方法时基类中的final方法 这些方法不能被覆盖也就不会出现误解     

 用继承表达行为间的差异 用字段表达状态上的变化

 通过继承得到了两个不同的类 用于表达act()方法的差异
 而Stage里面又包含了对Actor的引用 所以Stage类通过运用组合使得自己状态发生变化
 

猜你喜欢

转载自blog.csdn.net/weixin_40529025/article/details/81233016
今日推荐