本文主要是介绍适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
写在最前边:
研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0
阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。
Java 基础
第二阶段 面向对象编程 (高级)
一、类(静态)变量和类(静态)方法
1、需求
1.1用以前的技术
设置 Child类,设置计数变量count。
缺点
2、介绍
2.1 类变量和类方法,前边必须有
static
修饰,因此也叫静态变量、静态方法。
他们会被 同一类的 所有的 对象实例 所共享,在类加载的时候就生成了,即使没有创建任何对象实例也可以访问
2.2 定义
访问修饰符的权限范围 同普通变量的一样
访问修饰符 static 数据类型 变量名; //这个更好 static 访问修饰符 数据类型 变量名; 访问修饰符 static 数据返回类型 方法名(){}; //这个更好 static 访问修饰符 数据返回类型 方法名(){};
2.3 访问
类名.类变量名;//更推荐 对象名.类变量名; 类名.类方法;//更推荐 对象名.类方法;
3、 类变量
3.1 内存分析
后边补充的蓝线,是即使不创建对象可以访问类变量的原因哦
图片细节:
静态变量在内存中存放的位置有两种说法
一个是
堆中该类对应的class对象的最后
一个是方法区的静态域
根据JDK的版本不同而不同.jdk8以前在方法区,jdk8开始在堆3.2类变量使用细节
特别强调,类变量(静态变量)是绝对不可以在构造器中的!为啥?因为所有static的东西都在类第一次加载的时候完成,且只加载一次。而构造器是创建对象的时候使用的,和static的东西不是一个阶段
4、
类方法的使用场景:
希望不创建实例对象也可以使用的一些方法,经常当做工具来使用的话,开发成static很合适。如Math.max()、Arrays.sort()
使用细节
特别的,如果非要在静态方法中使用 非静态 成员,那么只能在静态方法中,创建本类的对象,通过对象调用 非静态 成员。
二、main方法(static方法
所以要遵循static方法的规则)
第5点举例
说明为什么args字符串数组是在运行时
传入的
第5点举例
IDEA中怎样实现main的动态传值
三、代码块(构造器的补充机制)
代码块的好处:

代码块的用法:
1、普通代码块
优先于构造方法被执行,无论使用哪个构造器都会首先执行代码块的内容。
- 每次创建对象,也会被调用
- 创建
子类
对象实例,父类的普通代码块也会被加载。父类先做
普通代码块的用法举例:
上图中两个构造器包含相同的语句
上图,把重复的语句提炼出来放入代码块,完美!
2、static代码块
作用是
对类进行初始化
,随着类的加载而执行
,并且只会执行一次
。2.1类什么时候被加载(静态代码块什么时候执行)
第一次创建某类的对象实例时
new
(一个类,在第一次new时才执行静态代码块,以后再新建对象便不再执行静态代码块))
创建
子类
对象实例,父类也会被加载使用类的
静态成员
时(静态代码块特有的)
特别注意,使用子类的静态方法,也会调用父类的静态代码块
小结
1、static代码块随着类的加载而被调用。
只能直接调用静态成员变量、静态成员方法。
2、 普通代码块随着 构造器的使用 而调用。什么操作会调用构造器,同时就会执行普通代码块。
可以调用任何属性和方法
所以构造器中,最前边隐含了
① super()
② 调用本类普通代码块和本类普通属性初始化。(按照代码位置的顺序)
3、一些需要牢记的执行顺序
重要
注:同一优先级的由定义的位置决定执行顺序
3.1 本类中
代码块、属性、构造器
的优先级静态属性
=
静态代码块 > 普通属性=
普通代码块 > 构造器3.1 父类和子类的
构造器、普通代码块
的执行顺序是:父类普通代码块 > 父类构造器 > 子类普通代码块 > 子类构造器
3.3 继承关系中 代码块、成员变量、构造器的优先级
重要
父类 静态属性
=
父类 静态代码块> 子类 静态属性
=
子类 静态代码块> 父类 普通属性初始化
=
父类 普通代码块> 父类 构造器
> 子类 普通属性初始化
=
子类 普通代码块> 子类 构造器
总的来说呢。就是 :
静态高于一切(因为首先进行父类子类的 类加载,类加载的时候静态信息随之创建)
普通遵循“父高子低”,大于构造器
但普通总会带着构造器这个"小兄弟",没有普通时构造器“占山为王”
四、单例设计模式
什么是单例模式?
1、整个软件系统中,某个类只能存在一个对象实例,且该类只提供一个取得其对象实例的方法。
2、单例模式有两种方法:1)饿汉式 2)懒汉式
1、饿汉式
在类加载时,实例就已经创建好了。
缺点
如果在程序中没有使用甚至很少使用,显然会造成资源的浪费。因为一般使用单例模式的对象都是重量级的哦。
优点
不存在线程安全问题
举例
java.lang.Runtime
2、懒汉式
当用户第一次使用静态方法getInstance的时候,才会创建Cat实例,后续再使用getInstance只会返回之前创建过的实例对象。
缺点
存在线程安全问题
优点
不会有资源浪费的现象
五、final关键字
使用场景:
主要就是两类:不希望被继承的类、不希望被修改的各种值和方法
这里注意哦方法的参数列表里的参数也可以定义为final(见下图)
使用细节
- 1、final修饰的属性就是
常量
,命名方式是XX_XX_XXX- 2、final修饰的属性必须赋初值,赋初值的地方有三种:
如果既有final修饰又有static修饰,那么还是遵循static高于一切,这个成员变量就不能在构造器中、普通代码块中使用。可以在static代码块中赋值
- 3、4、5、6
- 7、已知静态变量(类变量),每次被调用都会造成类重新加载。那么java的底层实现了,
final static一起修饰
一个类变量,那么使用它时就不会造成类加载
- 8、
这篇关于适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!