Java的类封装及关键字

article/2025/10/10 13:34:50

Java的类封装及封装关键字(this、static),类的使用

一、封装的基本概念

1.将东西打包在一起,然后以新的方式呈现出来(比如将方法和字段一起包装在一个单元中,这个单元以类的形式呈现出来)。
2.信息隐藏,隐藏对象的实现细节,不让外部直接访问到。
3.将数据和方法包装进类中,加上具体实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型。
从以上我们可以得知:定义类,定义其属性,方法的过程称为封装类

封装的优点:

  1. 良好的封装能够减少耦合。

  2. 类内部的结构可以自由修改。

  3. 可以对成员变量进行更精确的控制。

  4. 隐藏信息,实现细节。

二、类的创建及使用

(一).类的创建:

  1. 创建类需要用 class关键字

class 类名称
{
属性
方法
}


  1. 类的访问修饰符:在我们的代码中有许多或者方法和变量不希望别人有太高的权限访问,此时可以用访问修饰符把他隐藏起来。
    在这里插入图片描述
    public: 该类或非该类均可以访问
    private: 只有该类可以访问
    protected: 该类及其子类的成员可以访问,同一个包中的类也可访问
    默认: 同一个包中的类可以访问
  • 属性封装的实现(基于private):
    修改属性的可见性来限制对属性的访问
    为每个属性创造一个赋值方法取值方法,对于公开这些方法属性的访问中,根据需要加入相应操作
class Student
{private int score;//只有该类可以访问该变量public void setter(int score){	//赋值方法this.score = score;	//this.score是此类中定义的score,右边的是形参}public int getter(){return score-20;}
}
public class Test {public static void main(String[] args) {Student stu = new Student();stu.setter(100);System.out.println(stu.getter());}
}

以上的方法这样可以通过公开的方法(sette),(getger)来对类中的私有权限变量(score)进行读写。其他类不能直接对score直接进行访问。

  • 方法封装的目的:
    隐藏方法的实现细节(方法体),向外部提供公开接口(方法头),以供安全调用简化使用,方便修改维护。根据需要可以私有化方法,供内部使用。
class Student
{private int score;//只有该类可以访问该变量private void sco(int score){this.score = score-100; //this语法可见下文}public int myscore(int score){sco(score);return this.score;}
}
public class Test {public static void main(String[] args) {Student stu = new Student();System.out.println(stu.myscore(1000));		}
}

以上的sco是私有化的方法,其他类不可访问,调用公有化的mysocre,方法中调用私有化的方法sco,实现对私有化score变量的修改。


  1. 类的构造方法
  • 构造方法负责初始化对象,为对象的属性合适的初值
  • 创建对象时,其类的构造方法确保在用户操作对象之前,系统保证初始化的进行
  • 构造方法名与类名一致,没有返回类型(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有),方式实现主要为字段赋初值。一个类可以有多个构造方法(方法可重载,函数名一样,参数列表不同 )
  • 构造方法的调用在实例化时用new+构造方法自动调用,具体调用哪个构造方法根据传递参数自动选择,如果类中没有主动创建构造方法则在实例化时系统会自动创建一个无参数无实现的构造方法。
class Student
{int score;String sex;int age;Student(){System.out.println("构造1被调用");	}Student(int score,String sex,int age){System.out.println("构造2被调用");this.score = 0;this.sex = "男";this.age = 10;System.out.println(this.score+this.sex+this.age);}Student(int score,int age,String sex){System.out.println("构造3被调用");this.score = 0;this.sex = "女";this.age = 18;System.out.println(this.score+this.sex+this.age);}
}public class Test {public static void main(String[] args) {Student stu1 = new Student();Student stu2 = new Student(80,"实参",80);Student stu3 = new Student(80,80,"实参");}
}

结果如下:

构造1被调用
构造2被调用
010
构造3被调用
018

以上new传递的实参只是为了区分构造方法,并没有对实参或类的变量和方法做任何实现,如有需要可以在构造方法中做具体初始化。


  1. this关键字
  • ①在类的方法中,使用this关键字代表的时调用此方法的对象的引用
    (可以理解为this.score就是类中的变量score,所以可以实现形参名和类中的变量名相同,以下为了方便理解所以设置形参名和变量名不同,有兴趣可以修改形参名观察结果)
class Student
{int score;String sex;int age;Student(int newscore,int newage,String newsex){score = newscore;//构造方法根据传上来的参数对score初始化this.score = this.score -10;}	void test(){System.out.println(score);}
}public class Test {public static void main(String[] args) {Student stu = new Student(100,18,"男");stu.test();}
}

结果为:

90
  • ②this可以看作是一个变量,它的值是当前对象的引用
class Student
{int score;String sex;int age;Student(int newscore){score = newscore;}	void test(){Student stu2 = null;stu2 = this;//这里的this相当于stu这个对象,把stu赋值给stu2System.out.println(stu2.score);}
}public class Test {public static void main(String[] args) {Student stu = new Student(100);stu.test();}
}
  • ③在类的构造方法中可以调用this([参数列表])来调用该类的指定构造方法
    注意,调用指定构造方法时该指令必须在调用方法的第一句
class Student
{int score;String sex;int age;Student(int newscore){System.out.println("构造1调用");this.score = newscore;System.out.println(score);score = newscore;}	Student(int newscore,int age){this((newscore));//调用指定构造方法必须在第一句,如果在下面则会报错System.out.println("构造2调用");this.score = 500;System.out.println(score);}}public class Test {public static void main(String[] args) {Student stu = new Student(100,19);}
}

输出为:

构造1调用
100
构造2调用
500

  1. static关键字
  • 用来修饰类的成员—修饰成员变量的称为类变量(静态变量)
  • 修饰成员方法称之为类方法(静态方法)
  • 当类被加载时就会被加载,优先于对象的存在
  • 用来修是语句块称为静态代码块,优先于构造方法之前执行,只会执行一次,用来对静态代码块初始化(静态代码块只能初始化静态的变量)
  • 调用的时候可以直接通过类名.成员访问
  • 注意点1:静态方法只能访问外部静态成员
  • 注意点2:静态方法不能出现this关键字

当修饰类变量时(静态变量)

class Student
{static int score;
}public class Test {public static void main(String[] args) {Student.score = 10;Student stu1 = new Student();Student stu2 = new Student();System.out.println(stu1.score);System.out.println(stu2.score);stu1.score = 20;System.out.println(stu1.score);System.out.println(stu2.score);}
}

输出结果为

10
10
20
20

由此可知静态变量可以不通过实例化直接访问,并且当stu1修改了静态变量,stu2也会随之改变

当修饰类方法时(静态方法)

public class Test {public static void main(String[] args) {System.out.println(add(10,20));}static int add(int a,int b){return a+b;}
}

加上static可以不用实例化直接访问,如果没加则必须实例化,否则出错

当修饰静态代码块时

class Student
{int score;String sex;int age;static int data;static{System.out.println("静态代码块");}Student(int newscore,int age){System.out.println("构造2调用");}
}
public class Test {public static void main(String[] args) {Student stu = new Student(100,19);Student stu2 = new Student(100,19);}
}

结果为

静态代码块
构造2调用
构造2调用

我们new了两个对象,而静态代码快就被执行了一次,由此可知静态代码块只执行一次,并且在构造之前被执行

三、类的使用

使用类需要注意以下几点:

  1. 中的方法可以直接访问中的变量,不需要传参。

  2. 类相当于一个模板,要使用他必须实例化一个对象,实例化的内存划分如下图
    在这里插入图片描述

例如有个Student的类:
Student stu1 = new Student();
以上左边的Student是类名,stu1为实例化的对象名,new是实例化(创建对象)的关键字,后面跟的Student()为构造方法,一个类可以有多种构造方法,根据不同的构造方法决定创建对象时是否需要传参。

四、包

  • 一个类可以使用同一个包中的所有类
  • 一个类可以使用其他包中所有公开类

怎么使用其他包中的公开类

  • 在每个类签名加上完整包名,例如
    java.util.Data today = new java.util.Data();

  • 更简洁的方式,使用import语句来导用包(eclipse ctrl+shift+o)
    import java.util.Data;
    引用就可以用Data today = new Data();


http://chatgpt.dhexx.cn/article/QQS9UaW8.shtml

相关文章

八大基本类型以及封装类(JAVA)

话不多说先上图 取值范围与大小 类型默认值占用存储空间/字节范围包装类byte01-128~127(-2的7次方到2的7次方-1)(1.8)Byteshort02-32768~32767(-2的15次方到2的15次方-1)Short int04-2147483648~2147483647(-2的31次方到2的31次方-1)Integer …

Java中八种基本数据类型的大小,以及他们的封装类

Java中八种基本数据类型的大小,以及他们的封装类 1.int是基本数据类型,Integer是int的封装类,是引用类型。 int默认值是0,而Integer默认值是null, 所以Integer能区分出0和null的情况。 一旦java看到null,就…

Idea里封装类和重写Object中toString()方法的快捷方式

创建一个学生类,例如: public class Student {private String name;private int age; } 封装类 在IDEA中使用快捷方式altinsert键弹出(注意:此时光标应在类中): 点击后进入以下界面,点OK就好…

某公司的员工分为5类,每类员工都有相应的封装类。(黑马第三版Java基础入门 第四章编程题)

(1) Employee:这是所有员工总的父类。 ① 属性:员工的姓名,员工的生日月份 ② 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励 100 元。 (2) SalariedEmployee&#xff1a…

[Java]封装类

python中的int这样的数据类型已经是类的情况下,老牌的Java当然也有对基本数据类型的类封装 但是Java并没有Python这样激进,Java中的基本数据类型的并不直接是类 而是另外开辟炉灶,创建创建了一一对应的封装类实现 基本数据类型封装类构造方法…

个人简历”的Resume(java封装类)

某公司正进行招聘工作,被招聘人员需要填写个人信息,编写“个人简历”的封装类Resume,并编写测试类进行实现。类图及输出效果如下。 类名:Resume name : String (private) sex : String (private) age : int (private) Resume( …

JAVA封装之封装类及类的使用

目录 封装的概念1.信息隐藏2.属性封装3.方法封装 封装的实例运行结果总结 封装的概念 将东西包在一起,然后以新的完整形式呈现出来,将方法和字段一起包装到一个单元中,单元以类的形式实现 信息隐藏,隐藏对象的实现细节&#xff…

vue axios封装 类方法

1.下载axios npm i axios2.新建utils工具目录 3.创建config.js、、request.js、api.js 一、config.js用于配置不同环境下的baseURL(开发环境或者打包环境) //config.js export default {baseUrl: {dev: ,pro: } }二、request.js用于封装axios方法&…

简单理解为什么Java要使用封装类

个人学习所用,有错误和不足之处欢迎指出和补充。 目录 前言 基本数据类型与封装类的区别:(用 int 和 Integer 举例) 为什么要使用封装类: 前言 Java中存在八种基本数据类型:(整数型&#xf…

Java 基本数据类型以及封装类

本篇博客内容大部分是借鉴其他博客的,但是在此基础上博主本人修改以及添加了一些内容,也算属于原创,本篇博客仅供博主本人学习参考。 Java基本类型共有八种,基本类型可以分为三类, 字符类型 char; 布尔类…

java 中封装类有哪些_java中封装类(一)

java中封装类共九个,分别是Boolean,Byte,Short,Integer,Long,Float,Double,Character,Void 其中Void对于使用者并无多大意义,也不可以构造任何对象,代码如下: packagejava.lang;public final classVoid {public static final Class TYPE = Class.getPrimitiveClass("vo…

Java包装类(封装类)详解

目录 包装类概念 包装类的继承 基本数据类型——>>包装类 的转换 默认值的区别 包装类——>>基本数据类型 的转换 xxValueof方法 toString方法 区别 自动装箱: 自动拆箱: 基本数据类型、包装类——>String类型 的转换 Sting类型…

Java类的封装

目录 1.什么是类的封装? 2.如何实现类的封装 1.private操作符 2.get与set 1.语法格式 2.封装演示 1.什么是类的封装? 隐藏对象的属性和实现细节,仅对外提供公共访问方式。 类的封装可以让使用者使用更加简单,数据也会更加安…

基本类型的封装类

目 录 1.基本数据类型的封装类 2.int类型的封装类是Integer!其中常用的构造方法有: 3.Integer封装类中常用的方法: 4.封装类的常用操作: 用于基本数据类型与字符串之间的转换. int类型转换为String类型 String类型转换为int类型 (需要注意的是该字符串的字面上…

ubuntu18.04安装虚拟显示器,不接显示器可远程桌面

Overview 主机配置启用远程控制安装软件和支持其它注意事项Reference 主机配置 系统:Ubuntu 18.04显卡:Intel 集成显卡 启用远程控制 注意,如果 teamviewer 是有登录账号,通过账号链接,那么有无上文的 Ubuntu 自带的远…

WIN10系统 Indirect Display 虚拟显示器之特殊应用

by fanxiushu 2020-05-20 转载或引用请注明原始作者。 有人询问我是否可以实现这样一种功能: 对windows输出的每一帧图像数据显示做一些特殊处理(比如球形桌面,曲面化等特效),然后再显示到显示器上。 而且还不止一个人…

windows虚拟显示器开发(二)WDDM hook(USB转HDMI驱动、USB手写屏开发)

很久没有继续研究wddm hook了,最后一次研究还在3年前,不得不说虽然应用的少,但是wddm hook却是很有技术含量的一项技术,而且实用性很高,我们除了做虚拟显示器还能做很多的东西,比如高效的截屏(因…

Ubuntu20.04 虚拟显示器配置,解决Ubuntu无显示器时nomachine/vnc/Teamviwer等远程终端桌面卡顿问题

🍀设置虚拟显示屏 安装xserver-xorg sudo apt-get install xserver-xorg-core-hwe-18.04 sudo apt-get install xserver-xorg-video-dummy增加xorg配置文件,通过指令vim /usr/share/X11/xorg.conf.d/xorg.conf,添加以下内容。 Section &qu…

X86工控机虚拟显示器设置(nomachine远程桌面)

前言 使用arm设备不需要设置虚拟显示器,可能已经设置过了。使用X86工控机需要设置虚拟显示器,这里介绍如何设置、如何取消,如何使用远程桌面。 nomachine 一、打开车载主控制器的命令行终端,安装虚拟显示器相关驱动软件。 su…

出现多个虚拟显示器(通用非即插即用监视器)处理办法

导致原因 安装docker软件时进行了一些设置,然后就出现这种情况了 本来想着吧这几个显示器卸载就好了,发现根本没用 然后处理办法如下 首先打开系统应用 打开相关设置里面的 程序和功能 继续 关闭虚拟机平台 ##重启就好了