用Java编写类的教程。
微信搜索关注《Java学研大本营》,加入读者群,分享更多精彩
什么是类
类是我们面向对象语言代码的构建块,因为我们的程序是作为类系统编写的。类本质上是创建类似对象的蓝图。例如,你可以有一个类“fruit”,然后有那个类的实例来表示“apple”和“orange”。
类定义数据
类让我们定义复杂的数据类型来表示我们程序中的事物,我们如何做到这一点的一部分是通过属性。属性就像让我们存储值的内部变量。对象是有状态的,这意味着它们包含的值可以在不创建全新对象的情况下进行修改。这方面的一个例子是,如果你有一个“汽车”类,你可以有像“速度”、“品牌”和“型号”这样的属性
类定义行为
类不只是定义数据,与作为简单数据点的原始类型不同,类封装数据和行为。这意味着对象可以拥有数据,并且还可以在内部使用该数据进行操作。在编写类时,我们将这些编写为方法;它们本质上是让我们使用或修改对象内部状态的函数。因此,如果您有一个“汽车”类,您可以使用“加速”和“制动”等方法来表示汽车可以做的事情。
类的语法
类是使用 class 关键字定义的,属性和方法可以按任何顺序定义,但这是标准的
class Example {
// attributes
int x = 3;
int y = 2;
// methods
public int sum() {
return x+y;
}
public int difference() {
return x-y;
}
}
类的属性
属性是类的重要组成部分,因为它们定义了我们处理的数据,而属性是非常基本的并且类似于变量,但它们有一些应该注意的重要区别。属性必须有定义的类型,但它可以是泛型类型,它们总是在它们定义的类中的任何地方都可以访问,但是可以使用许多修饰关键字修改行为。
公共和私有属性
两个最常见的属性修饰符是 public 和 private。这些概念非常简单,但非常重要。使用公共属性,任何外部对象都可以访问该值,例如,如果我有一个具有属性“a”的对象,任何其他对象都可以读取或更改“a”的值这通常是不可取的,因为我们想要封装我们的状态远离程序的其余部分。由于这个原因,java 中的大多数属性都应该是私有的,我们通常会编写方法来根据需要读取和更改这些属性。这可以防止可能危及安全或导致不良影响的意外行为。
静态属性
常规属性属于从类创建的对象,而静态属性属于类本身。通过这种方式,您可以获得在同一类型的所有对象之间同步的值。例如,如果你想给特定类型的每个对象一个唯一的 ID,你可以为 ID 设置一个静态属性,然后在创建该类型的对象时使用它并递增它。这样每个对象都会有一个唯一的 ID,没有间隙或重叠。
最终属性
最终属性是 Java 版本的不可变属性。虽然普通属性可以被分配任意次数,但最终属性在对象的生命周期内只能分配一次。例如,如果你想要一个唯一的 ID,你会希望它是一个最终变量,因为该对象的 ID 应该永远不会改变。值得一提的是,final 变量仍然可以指向可变对象,例如,如果您有一个 final ArrayList,该 List 中的值仍然可以更改,您只是不能将其分配给一个全新的对象。(由于我生锈的背景,我倾向于默认将我的所有属性写为 final 以防止不必要的行为,但这在 java 社区中并未被普遍接受。)
属性的语法
public class Example {
// this variable can be accessed by the outside freely
public int a = 5;
// this variable can never be reassigned
private final String b = "Something";
// this attribute is the same across all objects of this type
private static double c = 19.2;
// modifiers can be combined to enrich behavior
// except private and public which are mutually exclusive
public static final boolean d = true;
}
方法
Java 中的方法使类特别有用,在 C 和 Go 等其他语言中,我们有称为结构的复杂类型,但它们只是数据类型。通过定义方法,我们能够为我们的对象添加内置行为,允许它们对我们定义的数据进行操作。方法允许一些不同的东西,比如参数和返回值,这使我们能够将它们扩展为非常灵活。与属性一样,方法可以是公共的、私有的或静态的。还有一些称为构造函数的特殊方法,用于在从类初始化对象时运行代码。
方法参数
有时我们想在我们的方法中使用对象属性以外的数据,我们通过使用方法参数来实现,参数允许我们传入一个值以供方法临时使用,这是通过以下语法完成的:
class MyClass {
// this is the syntax for a method
public void doSomething(String word) {
// do something with the word parameter
System.out.println(word);
}
}
// the parameter is passed into the parameters
new MyClass().doSomething("cat");
方法返回值
方法在调用时也可以返回值,这使我们能够从对象中获取信息。返回值必须在方法声明中指定,如果返回值不是“void”,那么所有可能的执行路径都必须返回一个值,即使它是 Null。您可以在此处查看方法返回的语法:
class MyClass {
// the int type in front of the method name states the return value
// if this is void there is no return value
public int getSomething() {
return 5; // the return statement returns the value
}
}
// we can get the value by calling the method on an object
int myInt = new MyClass().getSomething();
访问器和修改器
因为属性通常是私有的,我们需要一些方法来继续使用它们,这是通过方法完成的,称为访问器和修改器,访问器是一种从类内部获取一些信息并将其提供给调用者的方法,以及修改器是一种改变对象内部状态的方法。两种最简单的访问器和修改器称为 getter 和 setter,其中 getter 只是获取属性值并将其返回给调用者,而 setter 将值作为参数并将内部属性设置为该值。以下是 getter 和 setter 的示例:
class Example {
// this private attribute cannot be accessed
private int a = 5;
// this is a getter accessor
public int getA() {
return a;
}
// this is a setter mutator
public void setA(int newValue) {
a = newValue
}
}
推荐书单
《项目驱动零起点学Java》
《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。
《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。
马士兵,马士兵教育创始人,毕业于清华大学,著名IT讲师,所讲课程广受欢迎,学生遍布全球大厂,擅长用简单的语言讲授复杂的问题,擅长项目驱动知识的综合学习。马士兵教育获得在线教育“名课堂”奖、“最受欢迎机构”奖。
赵珊珊,从事多年一线开发,曾为国税、地税税务系统工作。拥有7年一线教学经验,多年线上、线下教育的积累沉淀,培养学员数万名,讲解细致,脉络清晰。
精彩回顾
微信搜索关注《Java学研大本营》
访问【IT今日热榜】,发现每日技术热点