封装
封装
何为封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
访问修饰符
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
下面的类使用了私有访问修饰符:
public class Logger {
private String format;
public String getFormat() {
return this.format;
}
public void setFormat(String format) {
this.format = format;
}
}
- public : 对所有类可见。使用对象:类、接口、变量、方法
被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。
以下函数使用了公有访问控制:
public static void main(String[] arguments) {
// ...
}
Getter访问器和Setter修改器
1.封装性
隐藏内部实现:Getter和Setter方法允许类隐藏其内部实现细节,只通过公共的接口(即方法)来暴露其状态。这有助于保护类的状态不被外部代码随意修改,从而维护类的封装性。
控制访问:通过提供Getter和Setter方法,类可以控制哪些属性可以被外部访问和修改,以及以何种方式访问和修改。这有助于维护类的一致性和完整性。
2.安全性
防止直接访问:通过将类的属性声明为私有(private),并仅通过Getter和Setter方法来访问和修改这些属性,可以防止外部代码直接访问和修改类的内部状态,从而提高代码的安全性。
数据验证:在Setter方法中,可以添加验证逻辑来确保只有符合特定条件的值才能被设置到类的属性中。这有助于防止无效或有害的数据被注入到对象中。
3. 验证和操作
范围检查:在Setter方法中,可以对传入的参数进行范围检查,以确保其值在合理的范围内。这有助于防止数据错误和异常。
格式转换:如果需要将数据从一种格式转换为另一种格式,可以在Setter方法中进行这种转换。例如,将字符串转换为日期对象等。
逻辑处理:在Setter方法中,还可以添加其他逻辑处理代码,如更新其他相关属性的值、触发事件等。
4.可读性和可维护性
提高代码可读性:通过为属性提供具有描述性的Getter和Setter方法名称,可以使代码更加易于理解。这有助于其他开发人员更快地了解代码的功能和用途。
便于维护:当需要修改类的内部实现时,只需要修改Getter和Setter方法的实现即可,而不需要修改外部代码。这有助于降低代码的维护成本。
5.访问级别
灵活控制:Getter和Setter方法可以根据需要被声明为不同的访问级别(如public、protected、private等),以控制不同类之间的访问权限。这有助于实现更灵活的类设计。
this关键字
1.引用当前对象的属性
当类的成员变量与方法的参数有相同的名字时,使用this关键字可以明确指定成员变量。例如:
public class Person {
private int age;
public void setAge(int age) {
this.age = age; // 使用this关键字引用age成员变量
}
}
2.调用当前对象的方法
在类的方法内部,可以使用this关键字调用同一个对象的其他方法。例如:
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
public void showName() {
System.out.println("My name is: " + this.getName()); // 使用this调用getName()方法
}
public String getName() {
return name;
}
}
3.在构造方法中调用另一个构造方法
通过使用this关键字可以在一个构造方法中调用同一类的另一个构造方法。这样做可以增加代码的复用性。例如:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this(name, 0); // 调用另一个构造方法
}
}
4.作为方法的返回值
虽然this关键字本身不直接用于作为方法的返回值(因为返回值类型需要明确),但可以通过编写方法来返回当前对象的引用。虽然这不是this关键字的直接用法,但它是this指向当前对象这一特性的一个应用示例。例如:
public class Person {
// ... 其他属性和方法 ...
public Person clone() {
// 这里实际应该进行深拷贝或浅拷贝,但为了示例,直接返回this
return this; // 注意:这通常不是克隆的正确实现
}
}
注意:上面的clone方法示例并不是真正的克隆实现,仅用于说明this可以作为对象引用的一个概念性示例。
5.在泛型方法或类中区分类型
虽然这不是this关键字的直接用法,但在泛型编程中,this关键字可以用于类型推断或类型安全的代码中,尤其是在实现泛型接口或类时。然而,这种用法更多地是体现在类型系统上,而不是this关键字的直接操作。
statci关键字
静态变量(Static Variables)
静态变量也称为类变量,因为它们属于类本身,而不是类的任何特定实例。无论创建了多少个类的实例,静态变量都只有一份拷贝,并且由所有实例共享。静态变量在类的第一次加载到 JVM 时被初始化,且只初始化一次。
public class MyClass {
static int staticVar = 42; // 静态变量
}
静态方法(Static Methods)
静态方法也属于类本身,而不是类的实例。这意味着它们可以在没有创建类实例的情况下被调用。静态方法不能访问类的非静态成员(因为非静态成员属于类的实例),但可以访问类的静态成员。
public class MyClass {
static void staticMethod() {
System.out.println("这是一个静态方法");
}
}
// 调用静态方法
MyClass.staticMethod();
静态代码块(Static Blocks)
静态代码块是在类加载到 JVM 时执行的代码块。它们主要用于初始化静态变量或执行只需执行一次的静态初始化操作。静态代码块在类的任何静态成员(包括静态变量和静态方法)被访问之前执行,且只执行一次。
public class MyClass {
static {
// 静态代码块
System.out.println("静态代码块执行了");
}
static int staticVar = 42; // 静态变量
static void staticMethod() {
// 静态方法
}
}
jar包
Jar包
Jar包是Java平台用来打包多个Java类文件、相关的元数据和资源(如文本、图片等)到一个文件中的标准格式。这些文件被压缩成一个.jar文件,便于分发、部署和版本控制。Jar包既可以作为应用程序的一部分来执行(比如可执行的jar包),也可以作为库(library)来被其他Java程序引用。
第三方类库
第三方类库是指由除应用程序开发者之外的组织或个人提供的Java类库。这些类库通常包含了一组预定义的类和接口,用于解决常见的编程问题或提供特定的功能,如数据库访问、网络通信、图像处理等。使用第三方类库可以大大提高开发效率,减少重复劳动,并且利用专家级的优化和测试。

浙公网安备 33010602011771号