JAVASE之类和对象(2)

发布时间:2026/9/15 4:08:11

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/9/12 4:32:34

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

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

2026/9/3 5:13:10

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

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

2026/9/6 23:10:26

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

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

2026/9/15 4:06:31

figma DX版技术解析:可动性、材质与精度的工程化升级

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:06:31

通用时代崛起:用兴趣组合打造不可替代的交叉优势

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:06:31

邮箱验证的正确姿势:从RFC 5322到生产环境分层策略

做开发这些年,几乎每个项目里都会遇到邮箱验证这个需求。注册表单、找回密码、订阅推送、CRM 客户录入,到处都要跟邮件地址打交道。而每当这个时候,总有人会贴出那种被反复转载的“一行正则校验邮箱”,用完了还觉得万事大吉。但作…

2026/9/15 4:06:31

构建合规隐私政策页面的技术实现与最佳实践

1. 项目概述Privacy Policy Website(隐私政策网站)是每个现代企业或独立开发者都必须重视的基础设施。作为法律合规的重要组成部分,一个专业的隐私政策页面不仅能建立用户信任,还能有效规避法律风险。不同于普通网页,隐…

2026/9/15 4:01:31

电动快换模块为何首选RS485+Modbus RTU通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码