1. Java环境基础
JVM, JRE 和 JDK
- JVM(Java Virtual Machine): 是 Java 虚拟机,负责执行 Java 字节码。JVM 提供了平台无关性,使得 Java 程序可以在不同操作系统上运行。
- JRE(Java Runtime Environment): 是 Java 运行时环境,包括 JVM 和 Java 类库。JRE 是执行 Java 程序所需的基本软件包。
- JDK(Java Development Kit): 是 Java 开发工具包,包含 JRE 和开发工具(如编译器 javac、Java 文档生成工具 javadoc 等)。用于开发和编译 Java 程序。
2. 运算符
Java 包含多种运算符,包括算术运算符、关系运算符、逻辑运算符等。例如:
- 算术运算符:
+, -, *, /, %
- 关系运算符:
==, !=, >, <, >=, <=
- 逻辑运算符:
&&, ||, !
位运算符:& | ^ ~ >> << >>>
int a = 5; // 二进制:0101
int b = 3; // 二进制:0011
System.out.println(a & b); // 输出 1 (二进制:0001)
System.out.println(a | b); // 输出 7 (二进制:0111)
System.out.println(a ^ b); // 输出 6 (二进制:0110)
System.out.println(~a); // 输出 -6 (二进制:...11111010)
System.out.println(a << 1); // 输出 10 (二进制:1010)
System.out.println(a >> 1); // 输出 2 (二进制:0010)
3. 面向对象
3.1 三大特性
封装: 将数据和方法包装在类中,通过访问控制符控制访问权限。
继承: 子类继承父类的属性和方法。
多态: 允许对象以多种形式存在,通常通过方法重载和重写实现。
extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
class 父类 {
}
class 子类 extends 父类 {
}
class Animal {
void sound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
3.2实现Java封装的步骤
修改属性的可见性来限制对属性的访问(一般限制为private),对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
4.Java ArrayList 方法
Java ArrayList 常用方法列表如下:
方法 | 描述 |
---|---|
add() | 将元素插入到指定位置的 arraylist 中 |
addAll() | 添加集合中的所有元素到 arraylist 中 |
clear() | 删除 arraylist 中的所有元素 |
clone() | 复制一份 arraylist |
contains() | 判断元素是否在 arraylist |
get() | 通过索引值获取 arraylist 中的元素 |
indexOf() | 返回 arraylist 中元素的索引值 |
removeAll() | 删除存在于指定集合中的 arraylist 里的所有元素 |
remove() | 删除 arraylist 里的单个元素 |
size() | 返回 arraylist 里元素数量 |
isEmpty() | 判断 arraylist 是否为空 |
subList() | 截取部分 arraylist 的元素 |
set() | 替换 arraylist 中指定索引的元素 |
sort() | 对 arraylist 元素进行排序 |
toArray() | 将 arraylist 转换为数组 |
toString() | 将 arraylist 转换为字符串 |
ensureCapacity() | 设置指定容量大小的 arraylist |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 |
retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 |
containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 |
trimToSize() | 将 arraylist 中的容量调整为数组中的元素个数 |
removeRange() | 删除 arraylist 中指定索引之间存在的元素 |
replaceAll() | 将给定的操作内容替换掉数组中每一个元素 |
removeIf() | 删除所有满足特定条件的 arraylist 元素 |
forEach() | 遍历 arraylist 中每一个元素并执行特定操 |
5. 多线程编程
Java 支持多线程,通过 Thread
类和 Runnable
接口实现。
5.1 线程安全的三大特性
- 原子性
- 可见性
- 有序性
5.2 线程锁与关键字
使用 synchronized
关键字实现同步,确保线程安全。
class Counter {
private int count = 0;
synchronized void increment() {
count++;
}
}
6. 端口与监听
- 端口: 用于区分不同的网络应用程序。
- 监听: 服务器通过
ServerSocket
监听特定端口的连接请求。
示例代码
// 服务器端
try (ServerSocket serverSocket = new ServerSocket(8888)) {
Socket socket = serverSocket.accept();
// 处理客户端请求
}
// 客户端
try (Socket socket = new Socket("localhost", 8888)) {
// 发送请求
}
7. GUI图形界面编程
Java 提供 AWT 和 Swing 用于图形用户界面开发。
/*
* Created by JFormDesigner on Sun Sep 29 17:23:34 CST 2024
*/
package com.ffyc.homework;
import java.awt.*;
import javax.swing.*;
/**
* @author 20526
*/
public class UserLogin extends JFrame {
private JButton loginButton;
private JButton registerButton;
private JPasswordField passwordField;
private JTextField usernameField;
private JLabel usernameLabel;
private JLabel passwordLabel;
public UserLogin() {
super("用户登录界面");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents();
this.setVisible(true);
// 添加按钮的事件监听器
loginButton.addActionListener(e -> System.out.println("登录成功!"));
registerButton.addActionListener(e -> System.out.println("注册成功!"));
}
private void initComponents() {
// 初始化组件
loginButton = new JButton("登录");
registerButton = new JButton("注册");
passwordField = new JPasswordField();
usernameField = new JTextField();
usernameLabel = new JLabel("用户名");
passwordLabel = new JLabel("密码");
// 设置颜色
Color backgroundColor = new Color(245, 245, 245);
Color buttonColor = new Color(70, 130, 180);
Color buttonHoverColor = new Color(100, 149, 237);
// 设置内容面板
Container contentPane = getContentPane();
contentPane.setLayout(null);
contentPane.setBackground(backgroundColor);
// 设置按钮样式
loginButton.setBackground(buttonColor);
loginButton.setForeground(Color.WHITE);
registerButton.setBackground(buttonColor);
registerButton.setForeground(Color.WHITE);
loginButton.setOpaque(true);
loginButton.setBorderPainted(false);
registerButton.setOpaque(true);
registerButton.setBorderPainted(false);
// 鼠标进入时改变按钮颜色
loginButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
loginButton.setBackground(buttonHoverColor);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
loginButton.setBackground(buttonColor);
}
});
registerButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
registerButton.setBackground(buttonHoverColor);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
registerButton.setBackground(buttonColor);
}
});
// 设置组件位置和大小
usernameLabel.setBounds(200, 170, 55, 40);
usernameField.setBounds(275, 165, 200, 50);
passwordLabel.setBounds(200, 230, 55, 40);
passwordField.setBounds(275, 225, 200, 45);
loginButton.setBounds(280, 295, 80, 30);
registerButton.setBounds(400, 295, 75, registerButton.getPreferredSize().height);
// 将组件添加到面板
contentPane.add(usernameLabel);
contentPane.add(usernameField);
contentPane.add(passwordLabel);
contentPane.add(passwordField);
contentPane.add(loginButton);
contentPane.add(registerButton);
// 设置窗口大小和位置
contentPane.setPreferredSize(new Dimension(770, 620));
pack();
setLocationRelativeTo(getOwner());
}
public static void main(String[] args) {
new UserLogin();
}
}