二、面向对象进阶
1.1 封装 private
1.1.1 描述
指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
1.1.2 封装的优点
- 良好的封装能够减少耦合
- 类内部的结构可以自由修改
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
1.2 this
在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
-
调用类中的属性
-
调用类中的方法或构造方法
-
调用另一个构造方法时,调用的代码必须编写在构造方法的第一行
class Person { private String name; private int age; Person() { this("qs",21); System.out.println("hello");//此句必须放在调用其他构造函数的语句之后 } Person(String name, int age) { this.name = name; this.age = age; } }
-
-
表示当前对象
1.3 static
1.3.1 概述
-
static表示“静态”的意思,可以用来修饰成员变量和成员方法。 static的主要作用在于创建独立于具体对象的域变量或者方法
2. 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问,**存储在方法区内** 3. 并且不会因为对象的多次创建而在内存中建立多份数据
1.3.2 重点
- 静态成员在类加载时加载并初始化
- 无论一个类存在多少个对象,静态属性永远在内存中只有一份
- 在访问时:静态不能访问非静态,非静态可以访问静态
1.4 代码块
-
普通代码块:在执行的流程中出现的代码块成为普通代码块
-
构造代码块:
- 在类中的成员代码块,称为构造代码块,在每次创建对象时执行,执行在构造方法之前
- 意义,构造函数不一定都会执行,多个构造函数,但是构造代码块会执行
- 可以有多个构造代码块
class Person { private String name; private int age; /* * 构造代码块,在对象创建时执行,在构造方法之前 * 意义,构造函数不一定都会执行,多个构造函数,但是构造代码块会执行 * 可以有多个构造代码块 */ { System.out.println("执行构造代码块"); } Person() { this("qs",21); System.out.println("hello"); } void say() { System.out.println("姓名:"+this.name+" 年龄:"+this.age); } }
-
静态代码块:
- 在类中使用static修饰的成员代码块,称为静态代码块,在类加载时执行。每次启动程序到关闭,只会执行一次的代码块
- 意义:初始化,类的基本属性初始化
class Person { private String name; private int age; static { System.out.println("执行静态代码块"); } Person() { this("qs",21); System.out.println("hello"); } void say() { System.out.println("姓名:"+this.name+" 年龄:"+this.age); } }
-
同步代码块
多线程中
面试题:构造方法与构造代码块以及静态代码块的失踪顺序
静态代码块 -> 构造代码块 -> 构造方法