第7节:面向对象进阶
记录现阶段,觉得有用的知识点
封装
用 权限修饰符 来控制访问权限。
推荐用 private 权限修饰符控制(只有自己本类才可以操作),自己最了解, 不让类以外的东西来操作他们。
权限修饰符
类 | 包 | 子类 | 不同包 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
this 关键字
代表对象。
在构造函数里面,如果要用 this( …… ) 来调用其他构造函数,这个语句必须放在 第1行。
static 关键字
-
static 可以修饰 成员变量、方法、代码块、内部类。
-
当类被加载到内存时,static修饰的静态变量就存储到了 方法区中。
-
可以把 static 的变量或方法,看成是类的变量或方法。
所有对象共用的。只要类被加载了,static就存在了(public static void main( ){ })。
推荐用 类名来访问 static 的方法,用对象名来访问 非static 的方法。
-
可能有种情况:当用 static 方法时,还没有创建出来对象。
所以在 静态方法中,不能调用 非静态的方法(需要用对象来访问的方法)。
包
-
java中包的概念,就像我们平常接触的 文件夹 的概念。
代表着一个路径,这个路径 必须能从 CLASSPATH 开始搜索并发现。
可以解决命名冲突问题。
-
一个 .java 文件,第一就用 package 关键字,声明了该文件夹所在的包。
使用 import 关键字导入其他的包。
-
同包下面的类(同文件夹下面的文件),是同一级的,可以直接拿来用。
java.lang 这个包下面的类 也可以直接拿来用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADPb537c-1588056319157)(C:\Users\ADMINI~1\AppData\Local\Temp\1588047814596.png)]
代码块
-
代码块的类型: 普通的代码块、构造的代码块、静态的代码块。
同步代码块(之后多线程时再来学习) -
在 创建(new)一个对象的时候,代码块 和 构造函数的执行顺序:
静态代码块 —> 构造代码块 —> 构造函数
如果在 类 里,有计数的需求,就可以用 构造代码块,而不用在每个构造函数里都写些相同的语句。。。
/** * 代码块 */
public class PersonDemo3 {
public static void main(String[] args) {
Person3 person3 = new Person3();
System.out.println("===================================");
{
System.out.println("普通的代码块,在执行流程中出现的代码块。。。。");
}
Person3 person = new Person3();
}
}
class Person3{
private String name;
private String age;
{
System.out.println("放在构造函数前的 构造代码块。。。");
System.out.println("构造的代码块: 相当于类中的一个成员,不是在 “执行流程中的”。。。。");
}
public Person3() {
System.out.println("构造函数执行体。。。。");
}
static {
System.out.println("静态的代码块,用 static 修饰的代码块。。。。");
System.out.println("随着类被加载时执行,因为是静态 static,只执行一次。");
}
{
System.out.println("放在构造函数后的 构造代码块。。。");
System.out.println("构造的代码块: 相当于类中的一个成员,不是在 “执行流程中的”。。。。");
}
}
编译之后:
Person3.class 内容:
class Person3 {
private String name;
private String age;
public Person3() {
System.out.println("放在构造函数前的 构造代码块。。。");
System.out.println("构造的代码块: 相当于类中的一个成员,不是在 “执行流程中的”。。。。");
System.out.println("放在构造函数后的 构造代码块。。。");
System.out.println("构造的代码块: 相当于类中的一个成员,不是在 “执行流程中的”。。。。");
System.out.println("构造函数执行体。。。。");
}
static {
System.out.println("静态的代码块,用 static 修饰的代码块。。。。");
System.out.println("随着类被加载时执行,因为是静态 static,只执行一次。");
}
}
PersonDemo3.class 内容:
public class PersonDemo3 {
public PersonDemo3() {
}
public static void main(String[] args) {
new Person3();
System.out.println("===================================");
System.out.println("普通的代码块,在执行流程中出现的代码块。。。。");
new Person3();
}
}
运行截图:
win10 显示桌面的快捷键: win+d。
有时候 窗口打开的太多了,想直接就回到桌面上。。。