Skip to content

CS61B 学习笔记

§1 Java入门

1.1 Java基础语法

Java的Hello-world程序如下:

1
2
3
4
5
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}

所有需要执行的代码都必须位于被声明为 public static void main(String[] args) 的方法内部。

在 Java 中,将一个程序文件转换为可执行文件的过程主要包括两个步骤:编译解释。要运行 Hello.java 中的代码,我们首先需要使用 javac HelloWorld.java 命令将代码编译为 .class 文件。然后,要运行代码,我们就会使用 java HelloWorld 命令。

Java程序的几个规则:

  1. 所有变量必须在使用之前被声明出来,并且还需要指定其类型。在整个程序中,类型不可改变。Java 是一种静态类型语言,这意味着所有的变量、参数和方法都必须声明其类型。一旦声明后,类型就不能再更改。表达式也具有隐式类型;例如,表达式 3 + 5 的类型就是 int
  2. 因为所有类型都是静态声明的,所以在程序运行之前,编译器就会检查这些类型是否兼容。这意味着,如果表达式中的类型不兼容,那么表达式将无法编译,而不会导致程序在运行时崩溃。
  3. 由于所有的 Java 代码都属于某个类,因此我们必须定义那些属于某个类的函数。属于某个类的函数通常被称为“方法 methods”。我们使用 public static 这个关键字来声明方法。

一些Java的基础语法:(大部分和C++相同)

System.out.print() 表示输出不带换行,System.out.println() 表示输出+换行。

Java没有 float 类型,只有 double ,并且字符串类型为 String

Java定义数组:int[] numbers = new int[5];

Java计算数组长度:numbers.length

1.2 Java定义和使用类

Java所有的代码都必须放在一个类里。

一个类可以使用另一个类。一个类使用另一个类的情况,有时被称为该类的“客户端”。如:

1
2
3
4
5
public class Dog {
public static void makeNoise() {
System.out.println("Bark!");
}
}
1
2
3
4
5
public class DogLauncher {
public static void main(String[] args) {
Dog.makeNoise(); //使用了Dog类
}
}

类可以被实例化,而这些实例可以存储数据。我们创建 Dog 类的实例,然后让 Dog 方法的行为取决于具体的 Dog 对象的属性。考虑下面的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Dog {
public int weightInPounds; //Dog 类拥有自己的变量,这些变量也被称为实例变量或非静态变量。

public void makeNoise() { //方法并没有使用 static 关键字。称为实例方法或非静态方法。
if (weightInPounds < 10) {
System.out.println("yipyipyip!");
} else if (weightInPounds < 30) {
System.out.println("bark. bark.");
} else {
System.out.println("woof!");
}
}
}
1
2
3
4
5
6
7
8
public class DogLauncher {
public static void main(String[] args) {
Dog d; //实例化对象并调用
d = new Dog();
d.weightInPounds = 20;
d.makeNoise();
}
}

我们可以使用构造函数来实例化对象:

1
2
3
4
5
6
public class Dog {
public int weight;
public Dog(int w) { //构造函数声明与定义
weight = w;
}
}
1
2
3
4
5
6
7
8
public class DogLauncher {
public static void main(String[] args) {
Dog d;
d = new Dog(20); //构造函数调用
Dog[] dogs = new Dog[2]; //类的数组声明
System.out.println(d.weight);
}
}

在Java中,方法/函数有类方法(静态方法)和实例方法(非静态方法)两种类型。实例方法是指只能由类的特定实例才能执行的操作。而静态方法则是由类本身直接执行的操作。

下面是静态方法:

1
2
3
4
5
6
7
8
9
10
11
public static Dog maxDog(Dog d1, Dog d2) {
if (d1.weightInPounds > d2.weightInPounds) {
return d1;
}
return d2;
}

//调用方式
Dog d = new Dog(15);
Dog d2 = new Dog(100);
Dog.maxDog(d, d2);

实例方法:

1
2
3
4
5
6
7
8
9
10
11
public Dog maxDog(Dog d2) {
if (this.weightInPounds > d2.weightInPounds) {
return this;
}
return d2;
}

//调用方式
Dog d = new Dog(15);
Dog d2 = new Dog(100);
d.maxDog(d2);

在某些情况下,让类具有静态变量是很有用的。这些变量是类本身固有的属性,而不是由具体实例来携带的。静态变量应该通过类的名称来访问,而不是通过具体的实例。

1
2
3
4
5
public class Dog {
public int weightInPounds;
public static String binomen = "Canis familiaris"; //静态变量
...
}

目前为止,我们已经知道了主函数命令 public static void main(String args[]) 括号外的内容的含义。

括号内的 String args[] 是命令行参数。

About this Post

This post is written by Ezra Yang, licensed under CC BY-NC 4.0.

#Data Structure #Java #Git

Comments