Hello World
在 Java 中,所有的代码都必须写在类里面,所以,我们定义一个 HelloWorld 类。main() 函数是程序执行的入口。main() 函数中调用了 Java 开发包 JDK 提供的打印函数 System.out.println() 来打印 hello world 字符串。除此之外,Java 中有两种代码注释方式,第一种是“// 注释…”双斜杠,表示后面的字符串都是注释,第二种是“/* 注释…*/”,表示中间的内容都是注释。
1 2 3 4 5 6
| public class HelloWorld { public static void main(String []args) { System.out.println("Hello World"); } }
|
基本数据类型
定义一个基本类型变量:
除此之外,为了方便我们使用,Java 还提供了一些封装这些基本数据类型的类,这些类实现了一些常用的功能函数,可以直接拿来使用。常用的有下面几个类:
定义一个 Integer 对象:
1
| Integer oa = new Integer(6);
|
数组
Java 中,我们使用[]来定义一个数组,如下所示:
在 Java 中,我们通过如下方式访问数组中的元素:
1 2
| a[1] = 3; System.out.println(a[2]);
|
流程控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int a; if (a > 1) { } else { }
int a; if (a > 1) { } else if (a == 1) { } else { }
|
1 2 3 4 5 6 7 8 9 10 11
| int a; switch (a) { case 1: break; case 2: break; default: }
|
1 2 3 4 5 6 7 8
| for (int i = 0; i < 10; ++i) { }
int i = 0; while (i < 10) { }
|
- continue、break、return,代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| for (int i = 0; i < 10; ++i) { if (i == 4) { continue; } System.out.println(i); }
for (int i = 0; i < 10; ++i) { if (i == 4) { break; } System.out.println(i); }
public void func(int a) { if (a == 1) { return; } System.out.println(a); }
|
类、对象
Java 语言使用关键词 class 来定义一个类,类中包含成员变量(也叫作属性)和方法(也叫作函数),其中有一种特殊的函数叫作构造函数,其命名比较固定,跟类名相同。除此之外,Java 语言通过 new 关键词来创建一个类的对象,并且可以通过构造函数,初始化一些成员变量的值。代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Dog { private int age; private int weight;
public Dog(int age, int weight) { this.age = age; this.weight = weight; }
public int getAge() { return age; } public int getWeigt() { return weight; } public void run() { } }
Dog dog1 = new Dog(2, 10); int age = dog1.getAge(); dog1.run();
|
权限修饰符
在前面的代码示例中,我们多次用到 private、public,它们跟 protected 一起,构成了 Java 语言的三个权限修饰符。权限修饰符可以修饰函数、成员变量。
- private 修饰的函数或者成员变量,只能在类内部使用。
- protected 修饰的函数或者成员变量,可以在类及其子类内使用。
- public 修饰的函数或者成员变量,可以被任意访问。
对于权限修饰符的理解,我们可以参看下面的代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Dog { private int age; private int weight; public Dog(int age, int weight) { this.age = age; this.weight = weight; }
public int getAge() { return age; } public void run() { }
}
|
继承
Java 语言使用 extends 关键字来实现继承。被继承的类叫作父类,继承类叫作子类。子类继承父类的所有非 private 属性和方法。具体的代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public class Animal { protected int age; protected int weight; public Animal(int age, int weight) { this.age = age; this.weight = weight; } public int getAge() { return age; } public int getWeigt() { return weight; } public void run() { } }
public class Dog extends Animal { public Dog(int age, int weight) { super(age, weight); }
public void wangwang() { } }
public class Cat extends Animal { public Cat(int age, int weight) { super(age, weight); } public void miaomiao() { } }
Dog dog = new Dog(2, 8); dog.run(); dog.wangwang(); Cat cat = new Cat(1, 3); cat.run(); cat.miaomiao();
|
接口
Java 语言通过 interface 关键字来定义接口。接口中只能声明方法,不能包含实现,也不能定义属性。类通过 implements 关键字来实现接口中定义的方法。在专栏的第 8 讲中,我们会详细讲解接口,所以,这里我只简单介绍一下语法。具体的代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public interface Runnable { void run(); }
public class Dog implements Runnable { private int age; private int weight;
public Dog(int age, int weight) { this.age = age; this.weight = weight; }
public int getAge() { return age; }
public int getWeigt() { return weight; }
@Override public void run() { } }
|
容器
Java 提供了一些现成的容器。容器可以理解为一些工具类,底层封装了各种数据结构。比如 ArrayList 底层就是数组,LinkedList 底层就是链表,HashMap 底层就是散列表等。这些容器我们可以拿来直接使用,不用从零开始开发,大大提高了编码的效率。具体的代码示例如下所示:
1 2 3 4 5 6 7
| public class DemoA { private ArrayList<User> users; public void addUser(User user) { users.add(user); } }
|
异常处理
Java 提供了异常这种出错处理机制。我们可以指直接使用 JDK 提供的现成的异常类,也可以自定义异常。在 Java 中,我们通过关键字 throw 来抛出一个异常,通过 throws 声明函数抛出异常,通过 try-catch-finally 语句来捕获异常。代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public class UserNotFoundException extends Exception { public UserNotFoundException() { super(); }
public UserNotFoundException(String message) { super(message); }
public UserNotFoundException(String message, Throwable e) { super(message, e); } }
public class UserService { private UserRepository userRepo; public UserService(UseRepository userRepo) { this.userRepo = userRepo; }
public User getUserById(long userId) throws UserNotFoundException { User user = userRepo.findUserById(userId); if (user == null) { throw new UserNotFoundException(); } return user; } }
public class UserController { private UserService userService; public UserController(UserService userService) { this.userService = userService; } public User getUserById(long userId) { User user = null; try { user = userService.getUserById(userId); } catch (UserNotFoundException e) { System.out.println("User not found: " + userId); } finally { System.out.println("I am always printed."); } return user; } }
|
package 包
Java 通过 pacakge 关键字来分门别类地组织类,通过 import 关键字来引入类或者 package。具体的代码示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package com.xzg.cd;
public class DemoA { }
package com.xzg.alg;
import java.util.HashMap; import java.util.Map; import com.xzg.cd.DemoA;
public class DemoB { }
|