一、Java语言特性
Java是一门面向对象的语言,它的特性包括类、对象、继承、封装、抽象、多态等。Java还有许多其他语言不具备的特性,这些都是Java的优势之一。
1. 类和对象
public class Student {
String name;
int age;
double score;
public void printInfo() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("成绩:" + score);
}
}
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "Tom";
stu.age = 18;
stu.score = 96.5;
stu.printInfo();
}
}
类是Java的基本单元,它包含了数据和方法。对象是类的一个实例,可以调用类中的方法和访问类中的数据。
2. 继承
public class Animal {
String name;
int age;
public void eat() {
System.out.println(name + "正在吃东西");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println(name + "正在汪汪叫");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "旺财";
dog.age = 3;
dog.eat();
dog.bark();
}
}
Java中的继承允许一个类继承另一个类的属性和方法,并且可以根据需要重写继承来的方法或者添加新的方法。
3. 封装
public class Book {
private String name;
private String author;
private double price;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Book book = new Book();
book.setName("Java从入门到精通");
System.out.println(book.getName());
}
}
Java中的封装把数据和方法封装在类中,外部不能直接访问这些数据,需要通过方法来访问。
4. 抽象
public abstract class Shape {
public abstract double area();
}
public class Square extends Shape {
double side;
public Square(double side) {
this.side = side;
}
public double area() {
return side * side;
}
}
public class Main {
public static void main(String[] args) {
Shape shape = new Square(4.0);
System.out.println("正方形的面积为:" + shape.area());
}
}
Java中的抽象类可以让子类继承并实现其中的抽象方法,这些抽象方法只有声明,没有具体的实现。
5. 多态
public class Animal {
public void speak() {
System.out.println("动物可以发出声音");
}
}
public class Cat extends Animal {
public void speak() {
System.out.println("猫发出“喵喵”声");
}
}
public class Dog extends Animal {
public void speak() {
System.out.println("狗发出“汪汪”声");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Cat();
animal.speak();
animal = new Dog();
animal.speak();
}
}
Java中的多态允许不同的子类实现同一个方法,可以通过父类的引用来调用这个方法,具有灵活性。
二、Java虚拟机特性
Java虚拟机(JVM)是Java的核心,它实现了Java语言的跨平台性,提供了自动内存管理、垃圾回收、动态字节码执行等特性。
1. 自动内存管理和垃圾回收
Java的自动内存管理和垃圾回收是通过Java虚拟机来实现的。它可以自动管理内存的分配和释放,大大地简化了程序员的工作,避免了内存泄漏和内存溢出等问题。
2. 动态字节码执行
Java编译器将Java源代码编译成Java字节码,Java虚拟机可以执行这些字节码,实现了跨平台的特性。Java虚拟机可以在运行时动态地加载和执行字节码,这也为Java语言的动态性和灵活性提供了基础。
3. 即时编译
即时编译是Java虚拟机中的一个重要特性,它可以将Java字节码编译成本地机器码,从而获得更好的执行效率。即时编译器会监测运行时的代码,并对经常执行的代码进行优化,提高程序的性能。
三、Java API特性
Java API(Application Programming Interface)是Java提供的一组类库和方法,通过这些类库和方法可以完成一些常见的任务,如IO操作、网络编程、GUI编程等。
1. IO操作
import java.io.*;
public class Main {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("请输入文字:");
String line = br.readLine();
System.out.println("输入的文字是:" + line);
} catch(IOException e) {
System.out.println("发生IO异常");
}
}
}
Java提供了丰富的IO类和方法,可以实现对文件、网络中数据的读取和写入。上面的代码演示了如何从控制台读取用户输入的数据。
2. 网络编程
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))) {
String cmd = "Hello, server!";
bw.write(cmd);
bw.newLine();
bw.flush();
String response = br.readLine();
System.out.println("服务器返回:" + response);
} catch (IOException e) {
System.out.println("发生异常:" + e.getMessage());
}
}
}
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))) {
String cmd = br.readLine();
System.out.println("客户端请求:" + cmd);
String response = "Hello, client!";
bw.write(response);
bw.newLine();
bw.flush();
} catch (IOException e) {
System.out.println("发生异常:" + e.getMessage());
}
}
}
Java中的网络编程可以实现Socket通信,通过套接字(socket)可以在网络中发送和接受数据。
3. GUI编程
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello, Java");
frame.setSize(200, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hello, world!");
frame.getContentPane().add(label);
frame.setVisible(true);
}
}
Java中的GUI(Graphical User Interface)编程可以使用Swing或JavaFX等类库来构建GUI应用程序,实现窗口、按钮、文本框等常见的界面元素,并添加动作或事件处理逻辑。
四、Java并发特性
Java并发编程是Java语言中的一个特性,它可以实现多个线程之间的并发执行,提高程序的效率和响应速度。
1. 线程
public class MyThread extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程 " + Thread.currentThread().getId() + " 正在执行:" + i);
}
}
}
public class Main {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
}
}
Java中的线程可以使用Thread类来创建,并且可以通过继承Thread类来实现自定义的线程。线程可以并发地执行。
2. 同步和锁
public class Counter {
private long count = 0;
public synchronized void add(long value) {
this.count += value;
}
public long getCount() {
return count;
}
}
public class MyThread extends Thread {
private Counter counter;
public MyThread(Counter counter) {
this.counter = counter;
}
public void run() {
for (int i = 0; i < 10000; i++) {
counter.add(1);
}
}
}
public class Main {
public static void main(String[] args) {
Counter counter = new Counter();
MyThread thread1 = new MyThread(counter);
MyThread thread2 = new MyThread(counter);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
System.out.println("发生异常:" + e.getMessage());
}
System.out.println("计数器的值为:" + counter.getCount());
}
}
Java并发编程需要使用同步和锁来保护共享的资源,否则会出现竞争条件和数据不一致的问题。上面的代码演示了如何使用synchronized关键字实现对计数器的同步。
3. 线程池
public class MyTask implements Runnable {
private int taskId;
public MyTask(int taskId) {
this.taskId = taskId;
}
public void run() {
System.out.println("任务 " + taskId + " 开始执行");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("发生异常:" + e.getMessage());
}
System.out.println("任务 " + taskId + " 执行完成");
}
}
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; i++) {
executor.submit(new MyTask(i));
}
executor.shutdown();
}
}
Java中的线程池可以实现线程的复用和调度。它可以管理一组线程,并在需要时分配和回收线程。上面的代码演示了如何使用ExecutorService和ThreadPoolExecutor来创建线程池和提交线程任务。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/246619.html
微信扫一扫
支付宝扫一扫