小工具知识网

当前位置: 首页 > 行业知识 > JavaSE--类和对象·下

行业知识

JavaSE--类和对象·下

2026-10-25 21:30:34 来源:互联网转载

1.封装 

1.1封装概念
面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。

Java中的封装是指将类的数据和操作封装在一个单元内,对外部隐藏内部实现细节,并通过访问修饰符控制对类的成员的访问权限。

封装的关键在于使用访问修饰符来控制对类的成员的访问权限。Java提供了几种访问修饰符:

通过封装,我们可以隐藏类的内部实现细节,只暴露必要的方法给外部使用。这样可以提高代码的安全性和可维护性,同时还可以提供一些额外的功能,如数据验证、数据转换等。

下面是一个简单的示例代码,演示了如何使用封装:

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

在上面的示例中,Person类的name和age字段被声明为私有的(private),外部类无法直接访问它们。为了访问这些字段,我们提供了getName和setName方法来获取和设置name字段的值,以及getAge和setAge方法来获取和设置age字段的值。在setAge方法中,我们还添加了一个数据验证的逻辑,确保年龄不会为负数。这样,我们就可以在外部类中安全地使用Person对象的属性。

注意:一般情况下成员变量设置为private ,成员方法设置为 public。
1.2封装扩展之包
在面向对象体系中,提出了一个软件包的概念,即: 为了更好的管理类,把多个类收集在一起成为一组,称为软件 包 。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。 在 Java 中也引入了包 ,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可 。
1.2.1导入类中的包

Java 中已经提供了很多现成的类供我们使用。

例如 Date 类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类。
public class Test {    public static void main(String[] args) {        java.util.Date date = new java.util.Date();        // 得到一个毫秒级别的时间戳        System.out.println(date.getTime());    }}
但是这种写法比较麻烦一些 , 可以 使用 import 语句导入包。
import java.util.Date;public class Test {    public static void main(String[] args) {    Date date = new Date();    // 得到一个毫秒级别的时间戳    System.out.println(date.getTime());    }}
如果需要使用 java.util 中的其他类 , 可以使用 import java.util.*
import java.util.*;public class Test {    public static void main(String[] args) {    Date date = new Date();    // 得到一个毫秒级别的时间戳    System.out.println(date.getTime());    }}
但是我们 更建议显式的指定要导入的类名, 否则还是容易出现冲突 的情况。 还可以使用 import static 导入包中静态的方法和字段(一般不用)。

    常见的包

  • 1. java.lang:系统常用基础类(String、Object)。
  • 2. java.lang.reflect:java 反射编程包;
  • 3. java.net:进行网络编程开发包。
  • 4. java.sql:进行数据库开发的支持包。
  • 5. java.util:是java提供的工具程序包。
  • 6. java.io:I/O编程开发包。
    1.2.2自定义包
    基本规则
    • 在文件的最上方加上一个 package 语句指定该代码在哪个包中。
    • 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 )。
    • 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路com/bit/demo1 来存储代码。
    • 如果一个类没有 package 语句, 则该类被放到一个默认包中。

      2.static成员

      在 Java 中,被 static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的 。
      2.1static修饰成员变量
      静态成员变量特性
      • 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
      • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
      • 类变量存储在方法区当中
      • 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁) 例如:
        //三位同学共享一间教室public class Student{    public String name;    public String gender;    public int age;    public double score;    public static String classRoom = "Bit306";    public static void main(String[] args) {        // 静态成员变量可以直接通过类名访问        System.out.println(Student.classRoom);        Student s1 = new Student("Li leilei", "男", 18, 3.8);        Student s2 = new Student("Han MeiMei", "女", 19, 4.0);        Student s3 = new Student("Jim", "男", 18, 2.6);                // 也可以通过对象访问:但是classRoom是三个对象共享的        System.out.println(s1.classRoom);        System.out.println(s2.classRoom);        System.out.println(s3.classRoom);    }}
        2.2static修饰成员方法
        Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不依赖于对象。静态成员一般是通过静态方法来访问的。
        public class Student{    private static String classRoom = "Bit306";    public static String getClassRoom(){        return classRoom;    }}public class TestStudent {    public static void main(String[] args) {        System.out.println(Student.getClassRoom());    }}//输出Bit306
        静态成员方法特性
        • 不属于某个具体的对象,是类方法
        • 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
        • 不能在静态方法中访问任何非静态成员变量
        • 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
        • 静态方法无法重写,不能用来实现多态
           2.3成员方法或成员变量的调用
          1. 通过对象的引用调用
          2. 通过类名调用

          在静态的方法当中不能直接使用任何非静态的成员变量和成员方法。要想使用,要通过new对象,然后通过对象的引用访问。但是在非静态方法当中,可以直接使用静态的成员方法或者静态的成员变量 。

          2.4static成员变量初始化

          1. 就地初始化
          2. get set初始化
          3. 构造方法初始化
          4. 静态代码块初始化

          3.代码块

          Java代码块(Code Block)是一组用大括号 {} 包围的语句,它们可以被视为一个独立的单元。

          代码块可以用来定义局部变量,这些变量只在代码块内部有效。这样可以控制变量的作用域,避免变量冲突和命名冲突。

          代码块还可以用来组织代码,将相关的语句放在一起。例如,可以在代码块中定义一个局部变量,并在代码块内部使用这个变量,这样可以限制变量的作用范围,提高代码的可读性和可维护性。

          代码块可分为以下几种:

          • 静态代码块:用 static 关键字修饰,用来初始化类的静态变量。
          • 实例代码块:不带任何修饰符,用来初始化实例变量。
          • 构造代码块:也称为构造方法内部的代码块,在创建对象时执行。

            例如: 

            public class Main {    public static void main(String[] args) {        int a = 10;        int b = 5;                // Java代码块开始        {            int sum = a + b;            System.out.println("Sum: " + sum);        }        // Java代码块结束                int c = 7;        int d = 3;                // Java代码块开始        {            int product = c * d;            System.out.println("Product: " + product);        }        // Java代码块结束    }} 
            3.1静态代码块

            静态代码块(Static Initialization Block)是一个特殊的代码块,在类加载时执行,并且只执行一次。它用 static 关键字修饰,用来初始化类的静态变量或执行一些静态方法。

            静态代码块的语法如下:

            static {    // 静态代码块中的代码}

            在静态代码块中,可以编写任意合法的 Java 代码。静态代码块中的代码会在类第一次加载的时候执行,并且只执行一次。

            静态代码块的主要作用是在类加载时进行一些初始化操作,例如读取配置文件、加载驱动程序等。由于静态代码块在类加载时执行,因此它的执行顺序是在静态变量初始化之前。

            下面是一个静态代码块的示例:

            public class MyClass {    static {        // 初始化静态变量        // 执行其他静态代码    }}

            需要注意的是,静态代码块不能访问非静态成员(比如实例变量和实例方法),因为它是在类加载过程中执行的,而不是在对象创建过程中执行的。

            3.2 实例代码块

            实例代码块(Instance Initialization Block)是在创建对象时执行的一段代码,它在每次创建对象时都会执行一次。实例代码块不需要使用关键字修饰,直接在类中定义即可。

            实例代码块的语法如下:

            {    // 实例代码块中的代码}

            实例代码块与构造方法的执行顺序是在构造方法之前执行的。每当创建对象时,实例代码块都会被执行一次。

            实例代码块的主要作用是在对象创建时进行一些初始化操作,例如初始化实例变量。也可以在实例代码块中执行其他任意合法的 Java 代码。

            下面是一个实例代码块的示例:

            public class MyClass {    {        // 初始化实例变量        // 执行其他代码    }}

            需要注意的是,实例代码块不能访问静态成员(比如静态变量和静态方法),因为它是在对象创建过程中执行的,而不是在类加载过程中执行的。

             
            ----------------------------------制作不易,麻烦给个三连支持一下吧------------------------------------

             

上一篇:U盘Win10系统安装指南,一键迁移与重装,轻松上手!

下一篇:服务器怎么改睡眠时间?