news 2026/8/8 7:58:26

4.3自定义类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4.3自定义类

1.class Xxx{field字段 constructor构造器 method方法}

class Employee { //实例字段 private String name; private double salary; private LocalDate hireDay; //构造器,总是和new操作符一起调用 public Employee(String n,double s,int year,int month,int day) { name=n; salary=s; hireDay=LocalDate.of(year,month,day); } //方法 public String getName() { return name; } public void raiseSalary(double byPercent) { double raise=salary*byPercent/100; salary+=raise; } }

2.使用多个源文件:把不同的类写进不同的.java文件里,然后让它们互相调用。

同一个包下(package)不用import,不同包下用import。

3.PS:

(1)为什么说String是一个类?

在 Java 中,String被定义在java.lang包中,源码开头就是public final class String(意味着这个类是最终版,不能有子类)。它和我们自己写的class Person本质一样,都是“引用数据类型”

关键颠覆认知点:Java 给String开了“语法外挂”(你可以直接用双引号"abc"写字符串,而不用new),这让你误以为它是基本类型。但它在内存中依然是堆里的对象,和LocalDate毫无区别。

(2)

  • intdouble:是基本数据类型(基本类型),直接存数值,存在栈中,没有方法可调用(你不能写int a = 5; a.toString();)。(基本类型只有八种:整数类byte(字节)、short(短整)、int(整型)、long(长整);小数类float(单精度)、double(双精度);字符类char(单个字符);真假类boolean(布尔值:true/false))

  • StringLocalDate:是引用数据类型,存的是堆内存地址,拥有丰富的方法(你可以写"abc".length())。

4.var

var关键字只能用于方法中的局部变量,参数和字段的类型必须声明。我们不会对数值类型使用var,如int、long、double,这样你就不用当心0,0L,0.0之间的区别。

局部变量:

public void myMethod() { // ✅ 正确:方法内部,立即赋值 var name = "张三"; // 推断为 String var today = LocalDate.now(); // 推断为 LocalDate var list = new ArrayList<String>(); // 推断为 ArrayList<String> }

参数:

public void setInfo(var id, var name) {}//不行

字段:

public class Person { var name; //不行 private String address;//可以 }

5.null

如果对null值应用一个方法,会产生一个NullPointerException异常

解决方法:requireNonNullElse、requireNonNull

6.隐式参数、显示参数

public void raiseSalary(double byPercent) { double raise=salary*byPercent/100; salary+=raise; }

隐式参数:salary,关键字this指示隐式参数形式:this.salary

显示参数:byPercent(局部变量)

7.封装(即类)

字段访问器方法,字段更改器方法

注意不要编写返回可变对象引用(可变类)的访问器方法(如Date类型)(存在更改器方法,对其调用更改器方法会改变对象的私有状态),首先应该对它进行克隆,return (Date)hireDay.clone();

P113

8.final(差不多对应其它语言中的常量,但是每个对象都存一份相同的字符串)

不可变类:类中的方法都是访问器方法

(1)final变量可以不赋初值,但必须在构造器(Constructor)中给它赋值

private final int id=12138;//赋初值,且之后不能再改 private final int id; // 没有赋初值 public Person(int id) { this.id = id; // 必须在构造器里赋值,且之后不能再改 }

(2)final修饰变量

final int MAX_SPEED = 120; final LocalDate date = LocalDate.now();

基本类型:变量数值不能再做修改;引用类型:变量不能再指向其他对象,但“遥控器”指向的对象本身,内部是可以被修改的(如果它是可变类的话)。

(eg:由于LocalDate类是不可变类,即类中方法均为访问器方法,对于值的修改是基于对象的值计算出新值,并以新对象的形式返回,不是对原对象的修改。date = LocalDate.of(2026, 8, 7);不行。

而Date类这种可变类,可以使用date.setTime();修改这个对象的值。)

(3)final修饰方法

禁止子类重写

public class Parent { public final void criticalLogic() { System.out.println("核心算法"); } }

(4)final修饰类:无法被继承

public final class Math { // 你无法 extends Math // ... }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 7:58:04

Unity WebGL与HTML深度集成实战:从构建到通信的完整指南

1. 项目概述&#xff1a;为什么Unity WebGL与HTML的集成如此重要&#xff1f; 如果你和我一样&#xff0c;从Unity原生平台开发转向WebGL&#xff0c;最初可能会觉得这不过是换了个发布平台&#xff0c;把游戏“放上网”而已。但真正上手后才发现&#xff0c;Unity WebGL与HTML…

作者头像 李华
网站建设 2026/8/8 7:53:36

从 CDS 元数据到 Fiori 页面,Framework-Specific Annotations 到底是谁在读取

在 ADT 里维护一个 ABAP CDS View 时,经常会看到一种很有意思的现象。同样都是以 @ 开头的 Annotation,有些注解会直接影响 CDS 对象自身,有些注解却像是埋在数据模型里的提示信息,CDS 激活时看起来没有发生多少变化,等数据来到 SADL、OData、Analytics Engine 或 SAP Fio…

作者头像 李华
网站建设 2026/8/8 7:53:19

Synology硬盘兼容性终极指南:5分钟解锁所有第三方硬盘

Synology硬盘兼容性终极指南&#xff1a;5分钟解锁所有第三方硬盘 【免费下载链接】Synology_HDD_db Add your HDD, SSD and NVMe drives to your Synologys compatible drive database and a lot more 项目地址: https://gitcode.com/GitHub_Trending/sy/Synology_HDD_db …

作者头像 李华
网站建设 2026/8/8 7:52:59

企业AI集成中的数据安全防护:从OpenAI API到内部模型部署的工程实践

在当今企业数字化转型和人工智能技术快速迭代的背景下&#xff0c;数据安全与知识产权保护已成为科技公司的生命线。近期&#xff0c;苹果公司向法院寻求初步禁令&#xff0c;指控其前员工可能将公司机密数据带至OpenAI&#xff0c;这一事件不仅是一起商业纠纷&#xff0c;更是…

作者头像 李华
网站建设 2026/8/8 7:49:14

GitLab项目迁移工具:自动化解决代码库迁移难题

1. 项目概述&#xff1a;GitLab迁移痛点与解决方案在团队协作开发中&#xff0c;GitLab作为主流的代码托管平台&#xff0c;经常面临项目或群组迁移的需求。无论是公司组织架构调整、服务器升级&#xff0c;还是跨实例迁移&#xff0c;传统的手动迁移方式都存在诸多痛点&#x…

作者头像 李华
网站建设 2026/8/8 7:47:50

【后端技术】多租户架构实践:Schema 级隔离的深层困境与选型真相

一、Schema 级隔离的管理成本&#xff1a;远比想象中恐怖 1. Schema 管理到底要管什么&#xff1f; Schema 级隔离不是「建个 Schema 就完事」&#xff0c;而是一整套全链路管理体系&#xff1a;管理维度具体内容痛点Schema 生命周期租户开通建Schema、续费扩容、降级、注销删S…

作者头像 李华