重点
一、封装
面向对象三大特性:封装、继承、多态
封装的含义是什么?
-
有这样一段代码:
class Person { String name ; // 表示姓名 int age ; // 表示年龄 void say(){ System.out.println("姓名:" + name + ";年龄:" + age) ; } }
此时age可以赋值为负数,出现逻辑错误。
-
为避免逻辑错误,我们需要在调用时为其做一个逻辑判断保证其逻辑正确。修改:
class Person { private String name; // 表示姓名 private int age; // 表示年龄 void tell() { System.out.println("姓名:" + getName() + ";年龄:" + getAge()) ; } public void setName(String str) { name = str; } public void setAge(int a) { if (a < 0 || a > 150) { System.out.println("年龄不合理!自动设置为1"); age = 1; } else { age = a; } } public String getName() { return name; } public int getAge() { return age; } }
-
使用private关键字进行封装,表示将其私有在类的范围之中。
建议对所有属性都进行封装,并为其提供get和set方法,保护和防止我们无意之中破坏我们的成员数据,不让类以外的程序直接访问和修改。
二、this关键字
-
this指当前对象,正在执行的这个方法
-
在构造方法中调用另一个构造方法时,this必须写在第一行
三、静态static
- 概述
- 静态修饰的属性存储在方法区中,所有对象都持有这个静态属性的内存地址
- 理解:非静态修饰的属性为对象的属性;静态修饰的属性是类的属性。
- 重点
- 静态修饰的方法,在类加载的时候就加载到内存了,无需再new对象,直接调用即可。静态修饰的方法被调用时,有可能对象还没被创建。
- 访问时静态资源不能操作非静态资源。
原因:执行实际早于非静态资源,非静态资源对象还没被加载。
四、包
使用类的时候需要导包,不导包时要写类的全称。
-
导包格式:
import 包名.类名;
-
有些类不需要导包:
- String,来自java.lang包
- 使用当前代码所在的包的类也不需要导包
五、权限修饰符
用于修饰Java中所有需要访问的资源,相当于给资源添加了一个访问权限,在某些权限不允许的情况,资源不被访问。
修饰符 | 类 | 包 | 子类 | 其他包 | 说明 |
---|---|---|---|---|---|
public | √ | √ | √ | √ | 跨包访问,访问其他包的资源(常用) |
protected | √ | √ | √ | × | 受保护的,不能访问其他包 |
default | √ | √ | × | × | 默认只能访问同一个类和包,不能访问子类和其他包 |
private | √ | × | × | × | 只有在同一个类中才能访问(常用) |
private封装成了只有同一个类才能用,封装地更合理,权限小。public用在资源要跨包访问时。
六、代码块
普通代码块:编写在顺序执行的代码流程中的代码块
重点是:构造代码块、静态代码块、同步代码块(到后面多线程中再详细学习)。
-
构造代码块:区别于构造方法的一点:无论用户调用哪个构造方法创建对象,构造代码块都必然执行。
-
静态代码块:在构造代码块的前面加上static。随着类的加载(第一次使用),静态代码块执行。由于类只加载一次,所以静态代码块只执行一次。
面试题:构造方法与构造代码块以及静态代码块的执行顺序。
静态代码块->构造代码块->构造方法
七、main方法详解
main方法就是程序执行入口,主要学习一下main方法中的关键字。
-
public:权限修饰符,可以在所有位置访问
-
static:静态的,可以通过类名调用
-
void:该方法无返回值
-
main:系统专门会找由public、static修饰的main方法
-
String[] args:该数组默认长度为0
八、单例设计模式
单例设计模式是比较重要的一个设计模式,会伴随整个开发生涯,单例设计模式有两种实现方式。
单例设计模式:保证程序在内存中只有一个对象存在(被程序所共享)
实现方式
- 懒汉式
随着类的加载在内存中对象为null,当调用 getInstance 方法时才创建对象(延迟加载) - 饿汉式
随着类的加载直接创建对象(推荐开发中使用)
实现步骤
- 保证一个类只有一个实例,实现方式:构造方法私有化
- 必须要自己创建这个实例,实现方式:在本类中维护一个本类对象(私有,静态)
- 必须向整个程序提供这个实例,实现方式:对外提供公共的访问方式(getInstance方法,静态)
- 懒汉式实现如下:
class Single{ private Single() {} private static Single s1 = null; public static Single getInstance() { if (s1 == null) { s1 = new Single(); } return s1; } }
- 饿汉式实现如下:
class Single2{ private Single2() {} private static Single2 s = new Single2(); public static Single getInstance() { return s; } void print() { System.out.println("Hello World!"); } }
总结
学习了Java三大特性中的封装,对代码的掌控力更高了,通过private修饰后的变量,使用get、set方法进行调用,后续还会学习到继承和多态,加油!