Java封装与构造方法

简介: Java封装与构造方法

Java封装


2.1 封装概述


概述


面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。


原则


将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。


2.2 封装的步骤


  1. 使用 private 关键字来修饰成员变量。


  1. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。


2.3 封装的操作——private关键字


private的含义


  1. private是一个权限修饰符,代表最小权限。


  1. 可以修饰成员变量和成员方法。


  1. 被private修饰后的成员变量和成员方法,只在本类中才能访问。


private的使用格式


private 数据类型 变量名 ;


  1. 使用 private 修饰成员变量,代码如下:


public class Student { 
  private String name; 
  private int age;
}


  1. 提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:


public class Student { 
  private String name; 
  private int age;
  public void setName(String n) {
    name = n;
  }
  public String getName() {
    return name;
  }
  public void setAge(int a) {
    age = a;
  }
  public int getAge() {
    return age;
  }
}


2.4 封装优化1——this关键字


我们发现 setXxx 方法中的形参名字并不符合见名知意的规定,那么如果修改与成员变量名一致,是否就见名知意了呢?


代码如下:


public class Student { 
  private String name; 
  private int age;
  public void setName(String name) {
    name = name;
  }
  public void setAge(int age) {
    age = age;
  }
}


经过修改和测试,我们发现新的问题,成员变量赋值失败了。也就是说,在修改了 setXxx() 的形参变量名后,方法并没有给成员变量赋值!这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏,方法中的变量名,无法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题。


this的含义


this代表所在类的当前对象的引用(地址值),即对象自己的引用。


注意:


方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。


this使用格式


this.成员变量名;


使用 this 修饰方法中的变量,解决成员变量被隐藏的问题,代码如下:


public class Student { 
  private String name; 
  private int age;
  public void setName(String name) {
    //name = name; 
    this.name = name;
  }
  public String getName() {
    return name;
  }
  public void setAge(int age) {
    //age = age; 
    this.age = age;
  }
  public int getAge() { 
    return age;
  }
}


注意:


方法中只有一个变量名时,默认也是使用 this 修饰,可以省略不写。


2.5 封装优化2——构造方法


当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。


小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。


构造方法的定义格式


修饰符 构造方法名(参数列表){
// 方法体
}


构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用构造方法后,代码如下:


public class Student { 
  private String name; 
  private int age;
  // 无参数构造方法
  public Student() {} 
  // 有参数构造方法
  public Student(String name,int age) {
    this.name = name; 
    this.age = age;
  }
}


注意事项


  1. 如果你不提供构造方法,系统会给出无参数构造方法。


  1. 如果你提供了构造方法,系统将不再提供无参数构造方法。


  1. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。


2.6 标准代码——JavaBean


JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。


public class ClassName{
  //成员变量
  //构造方法
  //无参构造方法【必须】
  //有参构造方法【建议】
  //成员方法
  //getXxx()
  //setXxx()
}


编写符合 JavaBean 规范的类,以学生类为例,标准代码如下:


public class Student {
  //成员变量
  private String name; 
  private int age;
  //构造方法
  public Student() {}
  public Student(String name,int age) {
    this.name = name; 
    this.age = age;
  }
  //成员方法
  publicvoid setName(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
  publicvoid setAge(int age) {
    this.age = age;
  }
  publicint getAge() {
    return age;
  }
}


测试类,代码如下:


public class TestStudent {
  public static void main(String[] args) {
    //无参构造使用
    Student s= new Student(); 
    s.setName("柳岩"); 
    s.setAge(18);
    System.out.println(s.getName()+"‐‐‐"+s.getAge());
    //带参构造使用
    Student s2= new Student("赵丽颖",18);
    System.out.println(s2.getName()+"‐‐‐"+s2.getAge());
  }
}
相关文章
|
7月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
238 2
|
3月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
243 4
|
10月前
|
Java
java构造方法,构造代码块,静态代码块的执行顺序
本文介绍了Java中构造方法、构造代码块和静态代码块的执行顺序。静态代码块用`static`声明,在JVM加载类时执行一次;构造代码块在每次创建对象时执行,先于构造方法;构造方法用于对象初始化,创建对象时调用。示例代码展示了这三者的输出顺序,并解释了它们的区别和应用场景。
348 1
|
11月前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
227 13
|
11月前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
11月前
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
10月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
343 0
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
635 15