Java是一种广泛使用的编程语言,尤其在企业级应用开发中。今天整理了一些常用的Java命令和概念,涵盖了从基础到高级的内容等。
1. 基础命令
1.1 编译Java文件
javac HelloWorld.java
这个命令用于编译Java源文件,生成字节码文件(.class文件)。
1.2 运行Java程序
java HelloWorld
这个命令用于运行已编译的Java程序。注意,不需要包含“.class”扩展名。
2. 包管理
2.1 创建包
package com.example.myapp;
在Java源文件的开头使用package
关键字来定义包。
2.2 导入包
import java.util.*;
使用import
关键字来导入其他包中的类。
3. 类和对象
3.1 定义类
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
使用class
关键字定义一个类,类中可以包含字段、构造函数和方法。
3.2 创建对象
Person person = new Person("Alice", 30);
person.displayInfo();
使用new
关键字创建对象,并调用对象的方法。
4. 继承和多态
4.1 继承
public class Student extends Person {
private String studentId;
public Student(String name, int age, String studentId) {
super(name, age);
this.studentId = studentId;
}
public void displayInfo() {
super.displayInfo();
System.out.println("Student ID: " + studentId);
}
}
使用extends
关键字继承一个类,并使用super
关键字调用父类的构造函数和方法。
4.2 多态
Person person = new Student("Bob", 20, "S12345");
person.displayInfo();
通过父类引用调用子类对象的方法,实现多态。
5. 接口和抽象类
5.1 定义接口
public interface Animal {
void makeSound();
}
使用interface
关键字定义接口,接口中的方法默认是公共抽象方法。
5.2 实现接口
public class Dog implements Animal {
public void makeSound() {
System.out.println("Woof!");
}
}
使用implements
关键字实现接口,并提供接口方法的具体实现。
5.3 抽象类
public abstract class Shape {
abstract void draw();
}
使用abstract
关键字定义抽象类,抽象类中可以包含抽象方法和具体方法。
6. 异常处理
6.1 抛出异常
public void checkAge(int age) throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
}
使用throws
关键字声明方法可能抛出的异常。
6.2 捕获异常
try {
checkAge(-1);
} catch (IllegalArgumentException e) {
System.out.println("Caught an exception: " + e.getMessage());
}
使用try-catch
块捕获和处理异常。
7. 集合框架
7.1 List
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
for (String fruit : list) {
System.out.println(fruit);
}
使用List
接口和ArrayList
类管理有序集合。
7.2 Set
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
for (String fruit : set) {
System.out.println(fruit);
}
使用Set
接口和HashSet
类管理无序且不重复的集合。
7.3 Map
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
使用Map
接口和HashMap
类管理键值对集合。
8. 多线程
8.1 创建线程
public class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}
}
继承Thread
类并重写run
方法创建线程。
8.2 启动线程
MyThread thread = new MyThread();
thread.start();
使用start
方法启动线程。
8.3 使用Runnable接口
public class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable is running");
}
}
实现Runnable
接口并重写run
方法创建线程。
8.4 使用ExecutorService
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(new MyRunnable());
executor.shutdown();
使用ExecutorService
管理线程池,提高线程管理的灵活性和效率。
9. 文件I/O
9.1 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
使用BufferedReader
和FileReader
读取文件内容。
9.2 写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"))) {
writer.write("Hello, World!");
}
使用BufferedWriter
和FileWriter
写入文件内容。
10. 网络编程
10.1 创建服务器
ServerSocket serverSocket = new ServerSocket(12345);
Socket socket = serverSocket.accept();
使用ServerSocket
创建服务器,并等待客户端连接。
10.2 创建客户端
Socket socket = new Socket("localhost", 12345);
使用Socket
创建客户端,并连接到服务器。
11. 数据库连接
11.1 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
使用Class.forName
方法加载数据库驱动。
11.2 建立连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
使用DriverManager.getConnection
方法建立数据库连接。
11.3 执行查询
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
使用Statement
和ResultSet
执行SQL查询并处理结果。
12. 注解
12.1 自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value();
}
使用@Retention
和@Target
注解定义自定义注解。
12.2 使用注解
public class MyClass {
@MyAnnotation(value = "Hello")
public void myMethod() {
System.out.println("Method with annotation");
}
}
在方法上使用自定义注解。
13. Lambda表达式
13.1 简单Lambda表达式
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
使用Lambda表达式遍历集合。
13.2 复杂Lambda表达式
Predicate<String> isLongName = name -> name.length() > 5;
List<String> longNames = names.stream().filter(isLongName).collect(Collectors.toList());
使用Lambda表达式和Stream API过滤集合。
14. 函数式接口
14.1 定义函数式接口
@FunctionalInterface
public interface MyFunction {
void apply();
}
使用@FunctionalInterface
注解定义函数式接口。
14.2 使用函数式接口
MyFunction myFunction = () -> System.out.println("Functional interface");
myFunction.apply();
使用Lambda表达式实现函数式接口。
15. 流处理
15.1 创建流
Stream<String> stream = Stream.of("Alice", "Bob", "Charlie");
使用Stream.of
方法创建流。
15.2 流操作
List<String> filteredNames = stream.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
使用流操作过滤和收集数据。
16. 并行流
16.1 创建并行流
Stream<String> parallelStream = names.parallelStream();
使用parallelStream
方法创建并行流。
16.2 并行流操作
List<String> parallelFilteredNames = parallelStream.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
使用并行流操作提高处理效率。
17. 反射
17.1 获取Class对象
Class<?> clazz = MyClass.class;
使用Class.forName
或类名获取Class对象。
17.2 创建对象
MyClass obj = (MyClass) clazz.getDeclaredConstructor().newInstance();
使用反射创建对象。
17.3 调用方法
Method method = clazz.getMethod("myMethod");
method.invoke(obj);
使用反射调用方法。
18. 泛型
18.1 定义泛型类
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
使用泛型定义类,提高代码的通用性和类型安全性。
18.2 使用泛型类
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
System.out.println(stringBox.getContent());
使用泛型类存储和操作数据。
19. 枚举
19.1 定义枚举
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
使用enum
关键字定义枚举类型。
19.2 使用枚举
Day day = Day.MONDAY;
switch (day) {
case MONDAY:
System.out.println("Monday");
break;
// other cases
}
使用枚举类型表示固定的常量集合。
20. 注解处理
20.1 定义注解处理器
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
MyAnnotation annotation = element.getAnnotation(MyAnnotation.class);
System.out.println("Processing annotation: " + annotation.value());
}
return true;
}
}
使用AbstractProcessor
类定义注解处理器。
20.2 注册注解处理器
@SupportedAnnotationTypes("com.example.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class MyAnnotationProcessor extends AbstractProcessor {
// process method
}
使用@SupportedAnnotationTypes
和@SupportedSourceVersion
注解注册注解处理器。
结论
Java提供了丰富的命令和概念,涵盖了从基础到高级的各个方面。通过掌握这些命令和概念,可以更高效地开发和维护Java应用程序。希望这些内容对你有所帮助。