005-面向对象编程-封装
面向对象编程-封装
-
对象在计算机中是什么样的
类的基本语法
构造器
-
创建对象时,对象会自动调用构造器
-
public class Constru { int a; // 无参构造器 public Constru(){ a=10; } // 有参构造器 public Constru(int a){ this.a=a; } }
-
类如果没有构造器,那么默认自带无参构造器;若有有参构造器,那就不会自带无参构造器,需要自己定义
-
右键->生成->选择创建构造器
this关键字
- this十一个变量,可以用在方法中,来拿到当前对象
- 应用场景:解决变量名称冲突的问题
- 比如类内函数的形参名和类内成员变量名一样的时候,使用this来标注是类内成员变量
封装
- 类就是一种封装
- 封装的设计要求:合理隐藏、合理暴露
- 如何隐藏?
- 使用private关键字修饰成员变量,就只能在本类中被直接访问
- 如何合理暴露?
- 使用public关键字修饰的get/set方法合理暴露
javabean
-
javabean成为实体类
-
是一种特殊类,满足以下要求:
-
右键->生成->getter和setter方法,按住shift可以全部选中成员患变量,点击确定即可生成所有成员变量的getter和setter方法
-
分层处理:实体类的对象只负责数据存取,而对于数据的业务处理交给其他类的对象完成,以实现数据和业务处理相分离
static关键字
- 静态,可以修饰成员变量、成员方法
static修饰成员变量
-
成员变量按照有无static修饰分为两种:
-
静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享
- 可以用对象名去点出这个变量
- 也可以用类名来点出这个变量
- 使用场景:可以定义一个计数器,在构造器里让改值加一,这样就知道这个类的对象被创建了多少次、
- 同一类中访问静态成员变量,可以不写类名,不用写成
类名.变量
public class Student { static String name; }
-
实例(对象)变量:无static修饰,属于每个对象的。
- 实例和对象两个概念是等价的
public class Student { int age; }
- 只能用对象去点出这个变量
-
static修饰方法
-
静态方法,属于类;
-
public class Student { public static void printHelloWorld() { System.out.println("HelloWorld"); System.out.println("HelloWorld"); System.out.println("HelloWorld"); } }
-
可以用对象名调用,也可以用类名调用
-
-
实例方法,属于对象。
-
public class Student { public void printHelloWorld() { System.out.println("HelloWorld"); System.out.println("HelloWorld"); System.out.println("HelloWorld"); } }
-
只能用对象名调用
-
-
如果不需要访问对象的数据就定义静态方法
-
如果需要访问对象的数据,那么这个方法必须定义成实例方法
静态方法的应用场景
- 常见的应用场景
- 做工具类
- 例如很多地方需要生成验证码,不必在每个类中都定义一个生成验证码的方法,写在一个工具类中,需要的时候直接用工具类点那个方法调用即可
- 工具类中都是方法,所以没有创建对象的必要性,所以建议把构造器私有,即创建一个private的构造器,这样就不能在别处创建对象了
- 做工具类
静态方法和实例方法注意事项
- 静态方法可以直接访问静态成员,但不可以直接访问实例成员(包括实例变量和实例方法)
- 实例方法既可以访问静态成员也可以访问实例成员
- 实例方法中可以写this,但静态方法不能写this