发布时间:2026/7/28 10:59:42
JAVASE之类和对象(2) 哪怕犯错也不能什么都不做。主页趋早–Step专栏JAVASE接上部分我们继续来学习JAVAEE类和对象。引言这篇文章接上一篇后半部分结束类和对象目录一、封装1、封装的概念2、访问限定符注意1我们在需要生成代码的地方点击鼠标右键然后选择下面的Geneate2然后就会出现下面的界面3这时候我们选择图片中的选项4点进来的界面是这样的5我们按住Ctrl 或者 Shift 键用鼠标点击需要生成的方法6最后点击下面的OK他就会自动生成了。3、包1概念2导入包中的类3自定义包1 选择src并且右键点击2 选择new3 选择Package并且点击4 输入包的名称这里我输入的是demo2可以自己定义名字,然后回车就创建好了一个包。我们来说一下创建包的基本原则1.在文件的最上方加上一个 package 语句指定该代码在哪个包中2.包名需要尽量指定成唯一的名字通常会用公司的域名的颠倒形式3.报名要和代码路径想匹配4.如果一个类没有package语句则该类被放到一个默认包中。4包的访问权限控制举例二、static成员1、再谈学生类2、static修饰成员变量3、static修饰成员方法4、static成员变量初始化1就地初始化2静态代码块初始化三、代码块1、代码块概念以及分类2、普通代码块3、构造代码块4、静态代码块拓展四、内部类1、内部类的分类2、实例内部类3、静态内部类4、局部内部类5、匿名内部类五、对象的打印一、封装1、封装的概念面向对象程序三大特性封装、继承、多态。而类和对象截断主要研究的就是封装特性。何为封装呢简单来说就是套壳屏蔽细节。比如我们使用的手机我们可以给手机充电可以开关机可以调节手机音量的高低可以看到手机内的应用但是我们看不到手机内部的构造这就是厂商将内部细节封装起来了我们无法看到。封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互。2、访问限定符JAVA中主要通过类和访问权限来实现封装类可以将数据以及封装数据的方法结合在一起更符合人类对事物的认知而访问权限用来控制方法或者字段能否直接在类外使用JAVA提供了四种访问操作符当然我们也是通过代码来学习封装的我们看下面这个代码class Person{ public String name; public int age; public void show(){ System.out.println(姓名 name 年龄 age); } } public class Text { public static void main(String[] args) { Person person new Person(); person.name Tom; person.age 12; person.show(); } }运行结果如下上面的代码我们已经很熟悉了吧但是上面这个代码不够安全容易被修改所以这时候封装的意义就体现出来了我们将代码进行修改很明显这个代码已经有错了因为private修饰了属性和方法private的权限是同一个包中的同一类上面代码中不在同一个类所以就会出错再来看下面代码我们将它放在同一个类中就不会报错了我们运行试试这就是运行结果了。这时候我们想如果我们非要在类外面访问该怎么办呢这也是有方法的我们继续class Person{ private String name; private int age; public void show(){ System.out.println(姓名 name 年龄 age); } public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } } public class Text { public static void main(String[] args) { Person person new Person(); //person.name Tom; //person.age 12; person.setName(Sam); person.setAge(15); System.out.println(person.getName()); System.out.println(person.getAge()); } }看代码我们运行一下试试这个代码就叫做封装。我们可以提供公开的方法进行访问这就相当于我们的手机充电口我们可以给手机充电但是我们不知道他是实现的细节。注意这时候我们说一个小技巧我们看到那么多方法需要一个一个字母敲出来可真的太浪费时间了为了提供我们的效率我们就用快捷方式我们的IDEA功能非常的强大可以自动帮助我们生成如何生成呢让我来告诉你我们先把那些方法删除现在的代码是这样然后就来生成吧1我们在需要生成代码的地方点击鼠标右键然后选择下面的Geneate2然后就会出现下面的界面3这时候我们选择图片中的选项4点进来的界面是这样的5我们按住Ctrl 或者 Shift 键用鼠标点击需要生成的方法6最后点击下面的OK他就会自动生成了。我们看结果这就是我们编译器自动生成的方法是不是和好用的当然我在这里写的比较繁琐我们自己使用的时候完全不会这么麻烦的同时我们再告诉大家一个快捷键 Alt Insert他也能帮助我们生成上面的方法至于他怎么使用大家自己尝试一下就知道了需要我们自己动手哦。3、包1概念在面向对象体系中提出了一个软件包的概念即为了更好的管理类把多个类手机在一起成为一组。比如我们的一个文件夹文件夹中的内容就是类可以帮助我们更好的管理类。在JAVA中包是对类、接口等封装机制的体现是一种类对接口等的很好的组织方式比如一个包中的类不想被其他包中的类使用。包还有一个重要的作用在同一个工程中允许存在相同名称的嘞只要处在不同的包中即可。2导入包中的类我们使用import语句来导入包我们看下面的代码这就是导入了包运行结果如下3自定义包我们如何自定义包呢下面就来介绍一下1 选择src并且右键点击2 选择new3 选择Package并且点击4 输入包的名称这里我输入的是demo2可以自己定义名字,然后回车就创建好了一个包。我们来说一下创建包的基本原则1.在文件的最上方加上一个 package 语句指定该代码在哪个包中2.包名需要尽量指定成唯一的名字通常会用公司的域名的颠倒形式3.报名要和代码路径想匹配4.如果一个类没有package语句则该类被放到一个默认包中。4包的访问权限控制举例我们在demo2中定义一个Date类然后我们在demo1中的Text中进行访问这样我们就可以访问不同包中的类了。二、static成员1、再谈学生类public class Student { public String name; public int age; public String gender; public double score; public Student(String name, int age, String gender, double score) { this.name name; this.age age; this.gender gender; this.score score; } public void print(){ System.out.println(this.name 今年 this.age 岁了他是一个 this.gender 生这次的考试成绩是 this.score 分); } public static void main(String[] args) { Student student1 new Student(Tom,12,男,66); Student student2 new Student(XiaoHong,13,女,76); Student student3 new Student(Sam,12,男,86); student1.print(); student2.print(); student3.print(); } }运行结果如下好的后面的操作我们都是在这个代码上提出问题并且在这个代码上修修改改。这时候我们有了第一个问题假如他们三个人都在同一个班中那么我们有必要都存一份吗很明显是没有必要的所以这个时候我们的static就出马了。在JAVA中被static修饰的成员称之为静态变量也可以称为类成员其不属于某个具体的对象是所有对象所共享的。2、static修饰成员变量static修饰的成员变量称为静态变量静态成员变量最大的特性不属于某个具体的对象是所有对象所共享的。静态成员变量特性1.不属于某个具体的对象是类的属性所有对象共享的不存储在某个对象的空间中。2.既可以通过对象访问也可以通过类名访问但一般更推荐使用类名访问3.类变量存储在方法区中4.生命周期伴随类的一生。随类的加载而加载随类的卸载而销毁运行结果如下上面的代码我们是已经给班级赋值了如果不赋值会是怎样呢我们看代码剩下的不改变运行一下这里称为了null至于为什么咱们可以看看上一篇文章就懂啦我们也可以在类外赋值如何赋值呢看代码3、static修饰成员方法成员方法同样也是使用类名进行访问的在JAVA中被static修饰的成员方法称为静态成员方法是类的方法不是某个对象所特有的。静态成员一般是通过静态方法来访问的。静态方法特性1.不属于某个具体的对象是类方法2.可以通过对象调用也可以通过类名调用更推荐使用类名调用3.不能在静态方法中访问任何非静态成员变量4.静态方法中不能调用任何非静态方法因为非静态方法有this参数在静态方法调用时候无法传递this引用。我们用代码说明一下上面的特性3和4这就是本部分的内容啦但是还没有结束咱们的思维导图还没有整理完哦。4、static成员变量初始化1就地初始化就地初始化就是在定义时就直接给出初始值2静态代码块初始化还记得这张图吗就让我们继续学习吧三、代码块1、代码块概念以及分类使用{}定义的一段代码称为代码块根据代码块定义的位置以及关键字又可分为以下四种1.普通代码块2.构造块3.静态块4.同步代码块2、普通代码块定义在方法中的代码块运行结果如下3、构造代码块定义在类中的代码块也叫实例代码块。构造代码块一般用于初始化实例成员变量。4、静态代码块使用static定义的代码块称为静态代码块一般用于初始化静态成员变量。拓展在这里我们拓展一个点我们先看代码public class Student { public String name; public int age; public static String classes; public Student(){ System.out.println(不带参数的构造方法); } public Student(String name, int age) { System.out.println(带两个参数的构造方法); this.name name; this.age age; } { System.out.println(这是实例代码块/构造块); } // 类加载的时候就会执行 static { System.out.println(这是静态代码块); } public void show(){ System.out.println(this.name 今年 this.age 岁了); } public static void main(String[] args) { Student student new Student(); } }我们运行一下看结果我们的静态代码块在类加载的时候就会执行了我们把main方法改成下面这样并且运行试试这就证明了我们上面的答案。这个时候我们再看下面的代码我们发现再次实例化的时候静态代码块就没有再执行了。这就是因为静态的只会执行一次注意:1.静态代码块不管生成多少个对象其只会执行一次2.静态成员变量是类的属性因此是在JVM加载嘞时开辟空间并且初始化的3.如果一个类中包含多个静态代码块在编译代码时编译器会按照定义的先后次序依次执行4.实例代码块只有在创建对象时才会执行四、内部类当一个事物的内部还有一个部分需要一个完整的结构进行描述而这个内部的完整结构又只为外部事物提供服务那么这个内部的完整结构最好使用内部类。在JAVA中可以将一个类定义在另一个类或者一个方法的内部前者称为内部类后者称为外部类内部类也是封装的一种体现。1、内部类的分类实例内部类静态内部类局部内部类匿名内部类2、实例内部类class Outer{ public int data1; int data2; public static int data3; public void test(){ System.out.println(Outer -- test()); } // 实例内部类 -- 未被static修饰 class Inner{ public int data4; int data5; public void func(){ System.out.println(Inner -- func()); } } } public class Test { }我们已经写好了上面的代码我们就慢慢来理解实例内部类吧如何获取内部类的对象我们可以把内部类看做一个实例成员使用外部类的对象来调用使用上面的两种方法都是可以的。注意1.外部类中的任何成员变量都可以在内部类方法中直接访问2.实例内部类所处的位置与外部类成员位置相同因此也受public,private等访问限定符的约束3.在实例内部类方法中访问同名的成员时优先访问自己的如果要访问外部类同名的成员必须外部类名称.this.同名成员来访问4.实例内部类对象必须在先有外部类对象的前提下才能创建5.实例内部类的非静态方法中包含了一个指向外部类对象的引用6.外部类中不能直接访问实例内部类中的成员如果要访问必须先要创建内部类的对象3、静态内部类class Outer{ public int data1 1; int data2 2; public static int data3 3; public void test(){ System.out.println(Outer--test()); } static class Inner{ public int data4 4; int data5 5; public static int data6 6; public void func(){ System.out.println(Inner--func()); } } } public class Test { public static void main(String[] args) { } }如何获取静态内部类对象注意1.在静态内部类中只能访问外部类中的静态成员当然如果我们非要访问也是有办法的2.创建静态内部类对象时不需要先创建外部类对象。4、局部内部类定义在外部类的方法体或者{}中该中内部类只能在其定义的位置使用使用很少public class Test { public void func(){ // 局部内部类 class Inner{ } } public static void main(String[] args) { } }注意1.局部内部类只能在所定义的方法体内部使用2.不能被public,static等修饰3.编译器也有自己独立的字节码文件命名格式外部类名字$数字内部类名字.class4.几乎不会使用5、匿名内部类class Person{ public String name; public int age; } public class Test { public static void main(String[] args) { // 匿名对象 只能使用一次 new Person(); System.out.println(new Person().name); System.out.println(new Person().age); // 匿名内部类 new Person(){ }; } }五、对象的打印class Person{ public String name; public int age; public Person(String name, int age) { this.name name; this.age age; } public void print(){ System.out.println(this.name 今年 this.age 岁了); } } public class Test { public static void main(String[] args) { Person person new Person(Tom,12); person.print(); } }运行结果如下我们可以看到我们每次打印的时候需要调用print方法当字段很多的时候我们写print方法的时候会显得函麻烦这时候我们就需要更简单的方法了。在我们JAVA中就有这样的方法我们先看下面的代码我们看到红色方框中的是一堆看不懂的东西它当然是有意义的我们这里不说他是什么意思我们想要把它变成打印里面的对象该怎么办呢这时候就需要用到我们所说的toString方法了看代码class Person{ public String name; public int age; public Person(String name, int age) { this.name name; this.age age; } public void print(){ System.out.println(this.name 今年 this.age 岁了); } Override public String toString() { return Person{ name name \ , age age }; } } public class Test { public static void main(String[] args) { Person person new Person(Tom,12); person.print(); System.out.println(person); } }运行结果如下我们同样是有快捷键来生成toString方法的,我们看下面的步骤1.右键 -- Generate2.找到toString()点击并选择就可以可以生成啦或者使用Alt Insert 剩下的步骤是完全一样的。我们JAVASE之类和对象部分就全部学习完啦但是我们还需要继续努力继续加油

相关新闻

2026/7/28 10:59:42

电脑OCR识别软件支持表格识别图片转Excel

软件介绍 今天这款叫OCR识别助手,是一款完全免费的离线OCR工具。免费到什么程度?不用安装、不用注册、不用登录,下载下来就是一个单文件,双击打开就能用。更关键的是——它不需要网络,断网状态下也能正常工作。 离线…

2026/7/28 10:54:42

大语言模型幻觉现象解析与规避方案

1. 大语言模型的"幻觉"现象解析 大语言模型(LLM)在生成文本时,有时会产生与事实不符、逻辑混乱或完全虚构的内容,这种现象被称为"幻觉"。就像人类在极度疲劳时可能出现幻觉一样,AI系统也会在特定条…

2026/7/28 10:54:42

Claude Opus 5在Three.js硬编码测试中性能优于Fable 5且成本低25%

最近在评估不同AI模型在3D开发场景下的表现时,发现了一个有趣的现象:Claude Opus 5在Three.js硬编码测试中,以比Fable 5低25%的价格实现了更优的性能表现。这对于预算有限但又需要高质量3D开发支持的团队来说,无疑是个值得关注的消…

2026/7/28 12:24:47

物联网设备硬件级安全方案与SE050集成实践

1. 为什么物联网设备需要硬件级安全方案 在智能家居和工业物联网项目中,我见过太多因安全漏洞导致的数据泄露案例。去年参与某智慧农业项目时,就遇到过传感器节点被恶意注入虚假数据的攻击。传统基于软件的安全方案(如TLS加密)存在…

2026/7/28 12:24:47

物联网设备电源管理:NBM7100A与PIC32MZ的优化方案

1. 项目背景与核心挑战在物联网设备和便携式电子产品的设计中,如何最大化初级电池(不可充电电池)的使用寿命一直是个关键难题。传统方案往往只关注硬件层面的低功耗设计,而忽略了系统级电源管理的潜力。这次我们要探讨的NBM7100A电…

2026/7/28 12:24:47

1500对图像:DeepPCB如何革新电路板缺陷检测

1500对图像:DeepPCB如何革新电路板缺陷检测 【免费下载链接】DeepPCB A PCB defect dataset. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPCB 在电子制造业中,电路板(PCB)的微小缺陷往往是产品故障的隐形杀手。传统…

2026/7/28 12:24:47

物联网安全芯片SE050与PIC18F4685的集成实践

1. 为什么物联网设备需要专用安全芯片?在智能家居和工业物联网项目中,我曾亲眼见证过因安全漏洞导致的灾难性后果。某次智能门锁项目验收时,安全团队仅用15分钟就通过射频信号重放攻击破解了系统。这让我意识到:传统MCU的软件加密…

2026/7/28 12:24:47

NBM7100A与STM32F091RC在物联网设备中的低功耗电源管理方案

1. 项目背景与核心挑战在物联网终端设备和便携式医疗设备领域,不可充电的初级电池(如锂亚硫酰氯电池)因其高能量密度和长寿命特性被广泛应用。但这类电池存在一个致命弱点:当负载电流出现脉冲式波动时,电池内阻会急剧上…

2026/7/28 12:19:47

FPV无人机DIY实战:从零搭建到飞行调试完整指南

我在家都能做出这个,中情局还藏着什么技术 - FPV Geek实战指南最近在FPV(第一人称视角)无人机圈子里,一个热门话题引起了广泛讨论:普通爱好者在家就能DIY出性能不错的FPV设备,这让人不禁好奇专业机构的技术…

2026/7/27 9:04:58

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/28 0:03:34

学术论文研究创新点梳理与核心价值提炼指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页,找文献翻遍十几个网站还是缺关键资料,写正文卡壳半天憋不出一句话,降重改到凌晨三点结果逻辑全乱,答辩前一天PPT还没做完。别慌,亲测这四个工具能让你少熬半…

2026/7/28 0:03:34

开发商售楼处数字化升级怎么做?

房企的数字化转型投入正在快速增长,据行业数据显示,2025年房企数字化投入规模已突破800亿元,年复合增长率达35%。售楼处的数字化升级不是单一环节的改造,而是从“获客-展示-成交-服务”全链路的系统升级。数字化升级四步法第一步&…

2026/7/28 0:03:34

模型不再值钱之后,AI 编程工具在争什么

2026 年 7 月,AI 编程工具赛道发生了一个标志性转折:模型本身不再值钱了。当 Kimi K3 开源模型在编程基准上击败 GPT 和 Claude,当 GitHub Copilot 第一次把开源模型纳入选择器,当 OpenAI 把 Codex 并入 ChatGPT 做成三合一超级应…

2026/7/28 4:38:09

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…