Java学习资源与编程要点全解析
一、Java学习资源概述
在学习Java的道路上,丰富的资源能助力我们不断提升编程技能。以下为大家介绍一些实用的学习资源。
(一)相关书籍
有不少关于Java编程的书籍值得阅读,例如:
|书名|作者|ISBN|简介|
| ---- | ---- | ---- | ---- |
|《Sams Teach Yourself Java 2 in 21 Days, Third Edition》| Rogers Cadenhead、Laura Lemay | 0 - 67232 - 370 - 2 | 虽前两周部分内容有重复,但讲解更深入,涵盖众多高级主题 |
|《Sams Teach Yourself J2EE in 21 Days》| Martin Bond等 | 0 - 67232 - 384 - 2 | 针对想使用Java 2 Enterprise Edition (J2EE) 的开发者的教程 |
|《JXTA: Java P2P Programming》| Daniel Brookshier等 | 0 - 67232 - 366 - 4 | 介绍Sun Microsystem的JXTA类,支持点对点网络编程 |
|《MySQL and JSP Web Applications: Data - Driven Programming Using Tomcat and MySQL》| James Turner | 0 - 67232 - 309 - 5 | 为使用MySQL数据库进行JavaServer Pages编程的开发者提供建议和教程 |
|《Developing Java Servlets, Second Edition》| James Goodwill、Samir Mehta | 0 - 67232 - 107 - 6 | 关于Java servlet和JavaServer Pages编程,以及如何与XML、Enterprise Java Beans和Java 2 Enterprise Edition结合使用的教程 |
|《Jini and JavaSpaces Application Development》| Robert Flenner | 0 - 67232 - 258 - 7 | 指导使用Jini进行无线网络编程,Jini是Sun用于通过Java连接不同设备的技术 |
许多Sams Java书籍的章节和其他材料可在InformIT网站(http://www.informit.com )免费获取,该网站还包含即将出版书籍的章节、名为InfoBase的Linux资源以及计算机书籍作者和IT专业人士的新文章。Sams Publishing网站(http://www.samspublishing.com )有在线目录、即将发布的书籍列表以及作者网站链接。
(二)官方网站
Sun的官方Java网站(http://java.sun.com )是查找Java相关信息的首选。该网站提供以下功能:
1.
产品和API
:可从Java部门下载开发工具、Java类库和新的Java技术,包括软件开发工具包、语言文档以及50多种其他产品和新的Java类库。
2.
开发者服务
:为Java程序员提供技术信息,包括HTML格式的Java类库完整文档。注册免费开发者账户后,可获取语言会议信息、可搜索的Java错误报告数据库以及Java开发者和学习者的讨论论坛。
3.
文档和培训
:提供数千页免费文档和教程,涵盖软件开发工具包、Java 2版本1.4及所有以前版本的Java类库,以及Sun官方Java书籍的信息。
4.
在线支持
:为Java产品购买者和Java开发工具用户提供技术支持、客户服务和销售协助。
5.
社区讨论
:提供大量基于Web的讨论区,适合初学者和有经验的专业人士。Sun会为获得最多“Duke Dollars”的参与者颁发奖品,“Duke Dollars”由讨论社区成员在有人提供有用信息时发放。
6.
行业新闻
:发布与即将发布的产品和Java相关活动(如JavaOne,每年在旧金山和日本举行的Java程序员会议)有关的公告,还有Sun Java软件部门的新闻稿和“成功案例”,展示Java语言的专业应用实例。
7.
解决方案市场
:是一个关于Java开发者感兴趣的产品和服务信息的数据库,可在此查找JavaBeans组件、开发工具、顾问或新的类库。
(三)其他网站
- Café au Lait :Elliotte Rusty Harold运营的博客(http://www.ibiblio.org/javafaq/ ),经常更新Java新闻、产品发布和其他程序员感兴趣的网站信息,还提供Java常见问题列表和程序员多年来整理的一些非官方文档。
- Workbench :一个涵盖Java、互联网技术、计算机书籍等类似主题的博客(http://workbench.cadenhead.info )。
- Java Review Service (JARS) :该网站(http://www.jars.com )对网上发布的新程序、组件和工具进行评测,将一些资源评为“Top 1%”“Top 5%”或“Top 25%”,并按主题对资源进行分类,提供每个资源的描述和下载源代码的链接(如果可用)。
- JavaWorld Magazine :可在网站(http://www.javaworld.com )免费获取,是服务于Java编程社区的优秀杂志,每月发布频繁的教程文章、Java开发新闻和其他特色内容。
- Gamelan: Earthweb’s Java Directory :网站(http://softwaredev.earthweb.com/java )对Java程序、编程资源和其他信息进行编目,在开始重要的Java项目前,可在此扫描可能在程序中使用的资源。
(四)新闻组
Usenet上有许多Java讨论组,可通过互联网服务提供商或新闻服务(如Google Groups(http://groups.google.com/ )或NewsGuy(http://www.newsguy.com ))访问,以下是一些常见的Java讨论组:
-
comp.lang.java.programmer
:用于讨论与Java编程相关的问题和答案,适合所有不属于其他组的Java相关主题。
-
comp.lang.java.advocacy
:用于进行可能引发激烈或比较性辩论的Java讨论,若想讨论Java与其他语言的优劣,可在此组交流,也可参考该组讨论来判断Java是否适合正在进行的项目。
-
comp.lang.java.announce
:近年来活跃度较低,用于阅读对Java开发社区感兴趣的公告、广告和新闻稿,该组有审核机制,所有帖子在发布前需提交审核。
-
comp.lang.java.beans
:专注于JavaBeans编程相关讨论、已发布的Beans公告以及类似的组件软件开发主题。
-
comp.lang.java.corba
:高级讨论组,专注于Java语言对CORBA(Common Object Request Broker Architecture)的实现。
-
comp.lang.java.databases
:用于讨论与JDBC(Java Database Connectivity Libraries)和其他将Java程序连接到数据库的解决方案相关话题。
-
comp.lang.java.gui
:专注于抽象窗口工具包、Swing和其他图形用户界面类库及开发工具的讨论。
-
comp.lang.java.help
:为初学者提供讨论Java编程工具安装问题和类似困扰的场所。
-
comp.lang.java.machine
:最高级的Java讨论组,专注于讨论Java语言的实现、将其移植到新机器的问题、Java虚拟机的细节等主题。
-
comp.lang.java.security
:专注于与Java安全问题相关的讨论,特别是在万维网上运行Java程序和其他可执行内容时的安全问题。
(五)工作机会
如果学习Java是为了从事相关行业,一些资源提供了工作机会板块。若想加入Sun的Java部门,可访问(http://java.sun.com/jobs )。虽然Careerbuilder.com(http://www.careerbuilder.com )并非专门的Java就业资源网站,但可搜索超过二十多个职位数据库的招聘信息,包括报纸分类广告和许多其他来源。使用该网站需注册,但免费,可使用Java、Internet等关键词搜索超过100,000个职位发布信息。
二、Java编程基础要点
(一)符号与运算符
Java编程中有许多符号和运算符,例如:
-
运算符
:加法运算符(+)、减法运算符(-)、乘法运算符(
)、除法运算符(/)、取模运算符(%)、自增运算符(++)、自减运算符(–)、赋值运算符(=)、相等运算符(==)、不等运算符(!=)、大于运算符(>)、小于运算符(<)、三元运算符(? :)等。
-
其他符号
*:花括号({})用于定义代码块,分号(;)用于结束语句,双斜杠(//)用于单行注释等。
(二)变量与数据类型
- 数据类型 :Java有多种数据类型,包括基本数据类型(如int、float、double、char、boolean等)和引用数据类型(如类、接口、数组等)。
- 变量声明 :声明变量时需指定数据类型,例如:
int num;
double price;
char letter;
boolean isTrue;
- 变量赋值 :可在声明时赋值,也可后续赋值,例如:
int num = 10;
double price;
price = 29.99;
(三)条件语句与循环结构
-
条件语句
- if语句 :根据条件判断执行不同代码块,例如:
if (num > 10) {
System.out.println("num大于10");
} else {
System.out.println("num小于等于10");
}
- **switch语句**:根据表达式的值选择执行不同的分支,例如:
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("其他");
}
-
循环结构
- for循环 :常用于已知循环次数的情况,例如:
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
- **while循环**:当条件为真时持续循环,例如:
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
- **do - while循环**:先执行一次循环体,再判断条件,至少执行一次,例如:
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 10);
(四)类与对象
- 类的声明 :使用class关键字声明类,例如:
class Person {
String name;
int age;
public void sayHello() {
System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
}
}
- 对象的创建与使用 :使用new关键字创建对象,例如:
Person person = new Person();
person.name = "John";
person.age = 25;
person.sayHello();
(五)方法
- 方法的声明 :包含方法名、参数列表、返回类型和方法体,例如:
public int add(int a, int b) {
return a + b;
}
- 方法的调用 :通过对象调用实例方法,或通过类名调用静态方法,例如:
int result = add(3, 5);
System.out.println(result);
(六)异常处理
Java中使用try - catch - finally块处理异常,例如:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("发生算术异常:" + e.getMessage());
} finally {
System.out.println("无论是否发生异常,都会执行此块");
}
(七)输入输出流
Java提供了丰富的输入输出流类,用于文件读写等操作,例如:
import java.io.FileInputStream;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("test.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
(八)图形用户界面(GUI)
Java可使用AWT、Swing等库创建图形用户界面,例如创建一个简单的窗口:
import javax.swing.JFrame;
public class SimpleWindow {
public static void main(String[] args) {
JFrame frame = new JFrame("简单窗口");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
(九)多线程编程
Java支持多线程编程,可通过实现Runnable接口或继承Thread类创建线程,例如:
class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("线程执行:" + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadExample {
public static void main(String[] args) {
Thread thread = new Thread(new MyThread());
thread.start();
}
}
三、Java编程实践项目示例
(一)猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class GuessNumberGame {
public static void main(String[] args) {
Random random = new Random();
int number = random.nextInt(100) + 1;
Scanner scanner = new Scanner(System.in);
int guess;
int attempts = 0;
System.out.println("我已经想好了一个1 - 100之间的数字,你可以开始猜啦!");
do {
System.out.print("请输入你的猜测:");
guess = scanner.nextInt();
attempts++;
if (guess > number) {
System.out.println("猜大了,再试试!");
} else if (guess < number) {
System.out.println("猜小了,再试试!");
} else {
System.out.println("恭喜你,猜对了!你一共用了 " + attempts + " 次尝试。");
}
} while (guess != number);
scanner.close();
}
}
(二)时钟程序
import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ClockFrame extends JFrame {
private JLabel timeLabel;
public ClockFrame() {
setTitle("时钟程序");
setSize(200, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
timeLabel = new JLabel();
timeLabel.setFont(new Font("Arial", Font.BOLD, 24));
timeLabel.setHorizontalAlignment(JLabel.CENTER);
add(timeLabel);
Timer timer = new Timer(1000, e -> updateTime());
timer.start();
updateTime();
}
private void updateTime() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = sdf.format(new Date());
timeLabel.setText(time);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
ClockFrame clockFrame = new ClockFrame();
clockFrame.setVisible(true);
});
}
}
四、总结
学习Java需要不断积累知识和实践经验。通过利用丰富的学习资源,掌握Java编程的基础要点,并进行实践项目练习,我们可以逐步提升自己的Java编程水平,为从事相关行业打下坚实的基础。希望大家在Java学习的道路上不断进步,取得优异的成绩。
五、Java编程中的高级特性
(一)继承与多态
-
继承
:继承是Java中实现代码复用和建立类层次结构的重要机制。通过
extends关键字,一个子类可以继承父类的属性和方法。例如:
class Animal {
void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
void bark() {
System.out.println("狗叫");
}
}
public class InheritanceExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
dog.bark();
}
}
- 多态 :多态允许不同类的对象对同一消息作出不同的响应。多态主要通过方法重写和接口实现。例如:
interface Shape {
double area();
}
class Circle implements Shape {
double radius;
Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
class Rectangle implements Shape {
double length;
double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double area() {
return length * width;
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Shape circle = new Circle(5);
Shape rectangle = new Rectangle(4, 6);
System.out.println("圆的面积: " + circle.area());
System.out.println("矩形的面积: " + rectangle.area());
}
}
(二)接口与抽象类
- 接口 :接口是一种抽象类型,它定义了一组方法签名,但不包含方法的实现。类可以实现一个或多个接口。例如:
interface Flyable {
void fly();
}
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("鸟在飞");
}
}
public class InterfaceExample {
public static void main(String[] args) {
Bird bird = new Bird();
bird.fly();
}
}
- 抽象类 :抽象类是包含抽象方法的类,抽象方法只有声明,没有实现。抽象类不能实例化,必须由子类继承并实现抽象方法。例如:
abstract class Vehicle {
abstract void move();
}
class Car extends Vehicle {
@Override
void move() {
System.out.println("汽车在行驶");
}
}
public class AbstractClassExample {
public static void main(String[] args) {
Car car = new Car();
car.move();
}
}
(三)泛型
泛型允许在定义类、接口或方法时使用类型参数,从而实现代码的复用和类型安全。例如:
class GenericBox<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class GenericExample {
public static void main(String[] args) {
GenericBox<Integer> intBox = new GenericBox<>();
intBox.setItem(10);
System.out.println(intBox.getItem());
GenericBox<String> stringBox = new GenericBox<>();
stringBox.setItem("Hello");
System.out.println(stringBox.getItem());
}
}
(四)注解
注解是Java 5引入的一种元数据机制,它可以为代码添加额外的信息。常见的注解有
@Override
、
@Deprecated
等。例如:
class Parent {
void print() {
System.out.println("父类方法");
}
}
class Child extends Parent {
@Override
void print() {
System.out.println("子类重写的方法");
}
}
public class AnnotationExample {
public static void main(String[] args) {
Child child = new Child();
child.print();
}
}
六、Java编程中的性能优化与调试
(一)性能优化
- 算法优化 :选择合适的算法可以显著提高程序的性能。例如,在排序时,对于大规模数据,快速排序通常比冒泡排序更快。
-
内存管理
:避免创建过多的临时对象,及时释放不再使用的对象。可以使用
System.gc()建议垃圾回收器进行回收,但不保证立即执行。 - 代码优化 :减少不必要的循环嵌套,避免重复计算。例如:
// 优化前
for (int i = 0; i < 1000; i++) {
int result = 2 * 3;
System.out.println(result);
}
// 优化后
int result = 2 * 3;
for (int i = 0; i < 1000; i++) {
System.out.println(result);
}
(二)调试技巧
- 使用调试器 :可以使用IDE(如Eclipse、IntelliJ IDEA)自带的调试器设置断点,逐步执行代码,查看变量的值。
- 日志记录 :在代码中添加日志记录,输出关键信息,帮助定位问题。例如:
import java.util.logging.Level;
import java.util.logging.Logger;
public class DebugExample {
private static final Logger LOGGER = Logger.getLogger(DebugExample.class.getName());
public static void main(String[] args) {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
LOGGER.log(Level.SEVERE, "发生算术异常", e);
}
}
}
七、Java编程中的数据库操作
(一)JDBC概述
JDBC(Java Database Connectivity)是Java用于连接数据库的标准API。通过JDBC,可以执行SQL语句,实现对数据库的增删改查操作。
(二)JDBC操作步骤
- 加载驱动程序 :根据使用的数据库,加载相应的驱动程序。例如,使用MySQL数据库:
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
-
建立连接
:使用
DriverManager.getConnection()方法建立与数据库的连接。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("连接成功");
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
-
执行SQL语句
:使用
Statement或PreparedStatement对象执行SQL语句。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class JdbcQueryExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
-
处理结果集
:使用
ResultSet对象处理查询结果。
(三)数据库事务
数据库事务是一组不可分割的操作序列,要么全部执行成功,要么全部失败。可以使用
Connection
对象的
setAutoCommit(false)
方法开启事务,使用
commit()
方法提交事务,使用
rollback()
方法回滚事务。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, user, password);
connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO users (name) VALUES ('John')");
statement.executeUpdate("UPDATE users SET name = 'Jane' WHERE id = 1");
connection.commit();
System.out.println("事务提交成功");
statement.close();
connection.close();
} catch (SQLException e) {
try {
Connection connection = DriverManager.getConnection(url, user, password);
connection.rollback();
System.out.println("事务回滚");
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}
}
}
八、Java编程中的网络编程
(一)TCP编程
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议。在Java中,可以使用
ServerSocket
和
Socket
类实现TCP编程。
// 服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("服务器启动,等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("客户端消息: " + inputLine);
out.println("服务器收到: " + inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("服务器响应: " + in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
(二)UDP编程
UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议。在Java中,可以使用
DatagramSocket
和
DatagramPacket
类实现UDP编程。
// 服务器端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServer {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket(8888)) {
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("客户端消息: " + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpClient {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket()) {
InetAddress address = InetAddress.getByName("localhost");
String message = "Hello, UDP Server!";
byte[] sendData = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 8888);
socket.send(sendPacket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
九、总结与展望
Java作为一种广泛应用的编程语言,具有丰富的特性和强大的功能。从基础的变量、数据类型、控制结构,到高级的继承、多态、泛型,再到数据库操作、网络编程,Java为开发者提供了全面的解决方案。
在学习Java的过程中,我们要不断实践,通过编写代码来加深对知识的理解。同时,要善于利用各种学习资源,如官方文档、在线教程、开源项目等,不断提升自己的编程水平。
未来,随着技术的不断发展,Java也在不断演进。例如,Java 11、Java 17等版本引入了许多新特性,如局部变量类型推断、文本块、密封类等。我们要紧跟技术发展的步伐,持续学习和掌握新的知识,以适应不断变化的市场需求。
希望大家在Java编程的道路上不断探索,取得更多的成果。
以下是一个简单的mermaid流程图,展示Java编程学习的基本路径:
graph LR
A[基础语法学习] --> B[面向对象编程]
B --> C[高级特性掌握]
C --> D[数据库操作]
C --> E[网络编程]
D --> F[项目实践]
E --> F
同时,为了方便大家回顾,这里列出Java编程中一些重要的知识点表格:
|知识点|描述|
| ---- | ---- |
|继承|子类继承父类的属性和方法,实现代码复用|
|多态|不同类的对象对同一消息作出不同响应|
|接口|定义一组方法签名,类可以实现多个接口|
|抽象类|包含抽象方法,不能实例化,需子类实现抽象方法|
|泛型|允许在定义类、接口或方法时使用类型参数|
|注解|为代码添加额外信息|
|JDBC|Java连接数据库的标准API|
|TCP编程|面向连接的可靠传输协议编程|
|UDP编程|无连接的不可靠传输协议编程|
超级会员免费看
170万+

被折叠的 条评论
为什么被折叠?



