2.Defining and Using Classes
1174字约4分钟
2024-12-15
概述
客户端程序和主要方法
没有 main 方法的 Java 程序不能使用 java 命令直接运行。但是,它的方法仍然可以使用另一个类的 main 方法调用。
public class Dog {
public static void makeNoise() {
System.out.println("bark!");
}
}
public class DogLauncher {
public static void main(String[] args) {
Dog.makeNoise();
}
}
类声明
Java 类可以包含方法和/或变量。我们说这样的方法和变量是类的 “成员”。成员可以是实例成员或静态成员。static 成员是使用 static 关键字声明的。实例成员是没有 static 关键字的任何成员。
类实例化
实例化一个类几乎总是使用 new 关键字来完成,例如 Dog d = new Dog()
。Java 中类的实例也称为 “Object”。
点表示法
我们使用点表示法访问类的成员,例如 d.bark()
。可以从同一类中或其他类中访问类成员。
构造函数
构造函数告诉 Java 当程序尝试创建类的实例时该做什么,例如,当它执行 Dog d = new Dog()
时应该做什么。
public class Dog {
public int weightInPounds;
/** One integer constructor for dogs. */
public Dog(int w) {
weightInPounds = w;
}
public void makeNoise() {
if (weightInPounds < 10) {
System.out.println("yip!");
} else if (weightInPounds < 30) {
System.out.println("bark.");
} else {
System.out.println("woooof!");
}
}
}
public class DogLauncher {
public static void main(String[] args) {
Dog d = new Dog(15);
d.makeNoise();
}
}
数组实例化
数组也使用 new 关键字进行实例化。例如 int[] arr = new int[10]
如果我们有一个 Object 数组,例如 Dog[] dogarray
,那么数组的每个元素也必须单独实例化。
静态方法与实例方法
静态方法和实例方法之间的区别非常重要。实例方法是只能由类的实例(即特定对象)执行的操作,而静态方法由类本身执行。实例方法是使用对特定实例的引用来调用的,例如 d.bark()
,而静态方法应该使用类名来调用,例如 Math.sqrt()
。你应该知道何时使用哪个。
public class Dog {
public int weightInPounds;
/** One integer constructor for dogs. */
public Dog(int w) {
weightInPounds = w;
}
public void makeNoise() {
if (weightInPounds < 10) {
System.out.println("yip!");
} else if (weightInPounds < 30) {
System.out.println("bark.");
} else {
System.out.println("woooof!");
}
}
/** 静态方法 */
public static Dog maxDog(Dog d1, Dog d2) {
if (d1.weightInPounds > d2.weightInPounds) {
return d1;
}
return d2;
}
/** 非静态方法 */
public Dog maxDog(Dog d2) {
if (weightInPounds > d2.weightInPounds) {
return this;
}
return d2;
}
}
public class DogLauncher {
public static void main(String[] args) {
Dog d = new Dog(15);
Dog d2 = new Dog(100);
Dog bigger = Dog.maxDog(d, d2); // 静态方法
Dog bigger = d.maxDog(d2); // 非静态方法
bigger.makeNoise();
}
}
静态变量
变量也可以是静态的。静态变量应使用类名进行访问,例如 Dog.binomen
而不是 d.binomen
。从技术上讲,Java 允许您使用特定实例 d.binomen
进行访问,但我们强烈建议您不要这样做以避免混淆。
public class Dog {
public static String binomen = "Canis familiaris";
/** One integer constructor for dogs. */
public Dog(int w) {
weightInPounds = w;
}
}
public class DogLauncher {
public static void main(String[] args) {
Dog d = new Dog(15);
Dog d2 = new Dog(100);
System.out.println(Dog.binomen);
}
}
void 方法
不返回任何内容的方法应该被赋予 void 返回类型。
this 关键字
在方法中,我们可以使用 this 关键字来引用当前实例。这相当于 Python 中的 self。
public static void main(String[] args)
这些东西的含义:
- public:到目前为止,我们所有的方法都以这个关键字开头。
- static:它是一个静态方法,不与任何特定实例关联。
- void:没有返回类型。
- main:这是方法的名称。
- String[] args:这是传递给 main 方法的参数。
命令行参数
参数可以由操作系统作为 “命令行参数” 提供给您的程序,并且可以使用 main 中的 args 参数进行访问。例如,如果我们从命令行调用我们的程序,就像这个 java ArgsDemo 一样,这些是命令行参数,那么 ArgsDemo 的主方法将有一个包含字符串 “these”、“are”、“command”、“line” 和 “arguments” 的数组。
使用库
没有必要从头开始自己构建一切。在我们的课程中,允许并强烈建议您使用 Java 的内置库,以及我们提供的库,例如 Princeton 标准库。您不应使用 Java 中提供或内置的库以外的库,因为它可能会使某些作业变得毫无意义,而且我们的自动评分程序将无法访问这些库,并且您的代码将无法工作。
从 Internet 获取帮助
欢迎您在线寻求帮助。但是,您应该始终引用您的来源,并且不应就特定的家庭作业问题或项目寻求帮助。例如,谷歌搜索 “how convert String Java” 或 “how read file Java” 是可以的,但你不应该搜索 “project 2 61b java berkeley”。