一、语言特点
Java是一种面向对象的、健壮、可伸缩、跨平台的编程语言,它最初由Sun Microsystems于1995年公开发布,现在属于Oracle公司。Java语言具有以下特点:
- 面向对象:Java语言本质上是面向对象,所有的代码都是围绕对象和类来构建的。
- 平台无关性:Java编译器将Java代码转换为字节码,这样一来,代码就可以在不同的操作系统和硬件上运行,只需要安装适当的JVM(Java虚拟机)即可。
- 健壮性:Java具有严格的数据类型检查机制,自动内存管理和异常处理机制,使得程序具有更好的健壮性。
- 高性能:Java编译器可以将Java代码转换为最优的机器码,具有比解释执行更高的性能。
- 多线程支持:Java支持多线程编程,可以更好地利用多核处理器和共享资源。
二、基本语法
Java语言的基本语法包括变量、数据类型、运算符、控制语句、数组、类和对象等。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
三、面向对象编程
Java是一种完全面向对象的语言,其核心思想是类和对象,所有的代码都是围绕这两个概念构建的。Java中每个类都有一个构造方法,用于创建对象实例。 Java中还有一些重要的概念,如封装、继承和多态。封装可以保护类中的数据不被外界直接访问,继承可以让子类拥有父类的属性和方法,多态可以提高代码的灵活性和可拓展性。
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating.");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println("Woof!");
}
@Override
public void eat() {
System.out.println("The dog is eating loudly.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal("Animal");
animal.eat();
Dog dog = new Dog("Dog");
dog.eat();
dog.bark();
}
}
四、异常处理
Java中有异常处理机制,可以在代码中捕获和处理异常,避免程序崩溃。Java中的异常分为受检异常和非受检异常。受检异常需要在方法中显式声明,非受检异常则不需要。
public class Main {
public static void main(String[] args) {
try {
int[] nums = new int[5];
nums[10] = 6;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界异常");
} finally {
System.out.println("这里是finally块");
}
}
}
五、IO流
Java中的IO流用于处理文件读写和网络连接等操作。Java中的IO流分为字节流和字符流,字节流用来处理二进制数据,字符流用来处理文本数据。常用的IO流类有InputStream、OutputStream、Reader和Writer等。
public class Main {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("file.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
isr.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
六、网络编程
Java中的网络编程可以使用Socket实现,Socket可以建立客户端和服务器之间的通信连接。Java中还提供了一些实用的网络库,如Java NIO和Java Netty。
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
OutputStream os = socket.getOutputStream();
os.write("Hello Server!".getBytes());
os.flush();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
while ((len = is.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
七、多线程编程
Java中的多线程编程可以使用Thread类、Runnable接口和Callable接口实现。Java中还提供了一些实用的多线程库,如Java.util.concurrent和Java Executor框架。
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("MyThread is running.");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
八、Java框架
Java中有很多成熟的框架,如Spring、Hibernate和Struts等。这些框架可以让开发人员更加高效地构建Web应用程序和企业级应用程序。
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@PostMapping
public User addUser(@RequestBody User user) {
return userService.saveUser(user);
}
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User saveUser(User user) {
return userRepository.save(user);
}
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
九、测试
Java中有很多测试框架,如JUnit和TestNG等。这些框架可以让开发人员更轻松地编写和运行单元测试和集成测试。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
Assert.assertEquals(3, result);
}
@Test
public void testSubtract() {
Calculator calculator = new Calculator();
int result = calculator.subtract(3, 2);
Assert.assertEquals(1, result);
}
}