Java基础知识点汇总

目录

第1章 Java简介

1.1 Java的历史和发展

1.2 Java的特点

1.3 Java开发环境

第2章 Java基础语法

2.1 数据类型与变量

2.2 运算符

2.3 控制流

第3章 面向对象编程(OOP)

3.1 类与对象

3.2 继承与多态

3.3 封装与抽象

第4章 异常处理

4.1 异常的概念

4.2 异常处理机制

4.3 自定义异常

第5章 Java常用类库

5.1 字符串处理

5.2 集合框架

5.3 输入输出流(I/O)

第6章 多线程编程

6.1 线程的基本概念

6.2 线程的生命周期

6.3 线程同步与线程安全

第7章 网络编程

7.1 网络基础

7.2 Java中的网络编程


第1章 Java简介

1.1 Java的历史和发展

Java最初由Sun Microsystems的James Gosling及其团队在1991年开发,并于1995年正式发布。Java最初被命名为Oak,目的是用于消费电子产品中的嵌入式系统。但随着互联网的兴起,Java逐渐演变为一种主要用于网络编程的语言。

Java自发布以来经历了多个版本的更新,从最初的JDK 1.0到现在的Java 17,每个版本都带来了新的功能和改进。Java的"一次编写,到处运行"(Write Once, Run Anywhere)的特性使其成为跨平台应用开发的首选语言。

1.2 Java的特点

  • 平台无关性:Java的最大特点是平台无关性。这主要得益于Java虚拟机(JVM)的作用,JVM可以在任何支持的操作系统上运行Java字节码文件,从而实现跨平台运行。

  • 面向对象:Java是一种纯面向对象的编程语言,支持封装、继承和多态等OOP特性,使得代码具有良好的可维护性和可扩展性。

  • 安全性:Java提供了丰富的安全机制,包括字节码验证、类加载器、沙箱模型等,特别是在网络环境中,Java的安全性尤为突出。

  • 多线程:Java内置了对多线程编程的支持,允许开发者轻松实现并发程序,这在处理大型、复杂的应用程序时尤为重要。

1.3 Java开发环境

要开始Java开发,需要安装JDK(Java Development Kit)。JDK包含了JRE(Java Runtime Environment)和一系列开发工具,如编译器(javac)和调试器(jdb)。配置好环境变量后,你可以在命令行中编译并运行Java程序。

第一个Java程序:Hello World

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }

这个简单的程序展示了Java的基本结构,包括类定义、主方法和输出语句。


第2章 Java基础语法

2.1 数据类型与变量

Java提供了多种数据类型,可以分为两大类:基本数据类型和引用数据类型。

  • 基本数据类型:包括四种整型(byte, short, int, long)、两种浮点型(float, double)、字符型(char)和布尔型(boolean)。基本数据类型直接存储数值,如:

    int number = 10; float price = 19.99f; char letter = 'A'; boolean isTrue = true;

  • 引用数据类型:包括类、接口、数组等,它们存储的是对象的引用(即内存地址),而不是对象本身。

    String message = "Hello, Java!"; int[] numbers = {1, 2, 3, 4, 5};

2.2 运算符

Java提供了多种运算符以操作变量和数据:

  • 算术运算符:包括加(+)、减(-)、乘(*)、除(/)、取余(%),用于数学运算。

    int sum = 10 + 5; int remainder = 10 % 3;

  • 关系运算符:用于比较两个数值,返回布尔值(true或false)。如等于(==)、不等于(!=)、大于(>)、小于(<)等。

    boolean isEqual = (10 == 10); // true boolean isGreater = (10 > 5); // true

  • 逻辑运算符:用于布尔逻辑运算,如与(&&)、或(||)、非(!)。

    boolean result = (10 > 5) && (5 < 3); // false

  • 赋值运算符:用于给变量赋值,如简单赋值(=)、加等赋值(+=)、减等赋值(-=)。

    int x = 10; x += 5; // x = x + 5

2.3 控制流

Java的控制流语句用于控制程序的执行流程:

  • 条件语句:根据条件的真假来执行不同的代码块。

    if (x > 10) { System.out.println("x is greater than 10"); } else { System.out.println("x is less than or equal to 10"); } switch (day) { case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; default: System.out.println("Other day"); break; }

  • 循环语句:重复执行某段代码,直到条件为false。

    for (int i = 0; i < 5; i++) { System.out.println("i = " + i); } while (x > 0) { x--; } do { x++; } while (x < 5);

  • 跳转语句:用于跳过或终止循环。

    for (int i = 0; i < 10; i++) { if (i == 5) { continue; // 跳过当前循环 } if (i == 8) { break; // 终止循环 } }


第3章 面向对象编程(OOP)

3.1 类与对象

在Java中,类是对象的模板,而对象是类的实例。类定义了对象的属性和行为,而对象是类的实际表现。

  • 类的定义

    public class Car { String brand; String model; int year; void start() { System.out.println(brand + " " + model + " is starting."); } }

  • 对象的创建

    Car myCar = new Car(); myCar.brand = "Toyota"; myCar.model = "Corolla"; myCar.year = 2020; myCar.start();

  • 构造方法:用于初始化对象。

    public class Car { String brand; String model; int year; // 构造方法 public Car(String brand, String model, int year) { this.brand = brand; this.model = model; this.year = year; } void start() { System.out.println(brand + " " + model + " is starting."); } } Car myCar = new Car("Toyota", "Corolla", 2020); myCar.start();

3.2 继承与多态

继承允许新类基于已有类创建,增强了代码的复用性。多态性允许对象以多种形式存在。

  • 继承的实现

    public class Vehicle { String brand; void start() { System.out.println("Vehicle is starting."); } } public class Car extends Vehicle { String model; void start() { System.out.println("Car " + brand + " " + model + " is starting."); } } Car myCar = new Car(); myCar.brand = "Toyota"; myCar.model = "Corolla"; myCar.start(); // 输出: Car Toyota Corolla is starting.

  • 多态的实现

    Vehicle myVehicle = new Car(); // 父类引用指向子类对象 myVehicle.start(); // 输出: Car is starting.

3.3 封装与抽象

封装是指将对象的属性私有化,提供公共的访问方法。抽象则是通过抽象类和接口来隐藏实现细节,强调行为而非具体实现。

  • 封装的实现

    public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

  • 抽象类与接口

    abstract class Animal { abstract void makeSound(); } class Dog extends Animal { void makeSound() { System.out.println("Woof Woof"); } } interface Drivable { void drive(); } class Car implements Drivable { public void drive() { System.out.println("Car is driving"); } }

第4章 异常处理

4.1 异常的概念

在Java中,异常是一种用于指示程序在运行时发生错误的机制。Java通过异常处理机制来捕获和处理这些错误,从而使程序能够在发生异常时采取适当的措施,而不是直接终止运行。

异常可以分为两大类:

  • 检查异常(Checked Exception):在编译时就必须处理的异常,如IOException、SQLException。
  • 非检查异常(Unchecked Exception):包括运行时异常(RuntimeException)和错误(Error),如NullPointerException、ArrayIndexOutOfBoundsException。

4.2 异常处理机制

Java提供了try-catch-finally语句来处理异常,使得代码更加健壮。

  • try-catch语句

    try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("ArithmeticException caught: " + e.getMessage()); }

    在这个例子中,try块中的代码尝试执行除以零的操作,这会抛出ArithmeticException异常。catch块捕获了该异常并进行了处理。

  • finally块:无论是否发生异常,finally块中的代码都会执行,通常用于释放资源。

    try { // 打开资源 } catch (Exception e) { // 处理异常 } finally { // 关闭资源 }

  • throw与throws关键字throw用于显式抛出异常,而throws则声明一个方法可能抛出的异常。

    public void checkAge(int age) throws IllegalArgumentException { if (age < 18) { throw new IllegalArgumentException("Age must be 18 or above."); } }

4.3 自定义异常

Java允许开发者根据特定的应用需求自定义异常类,以更好地表示某些特定错误情况。

  • 自定义异常类

    public class InsufficientFundsException extends Exception { public InsufficientFundsException(String message) { super(message); } }

  • 使用自定义异常

    public void withdraw(double amount) throws InsufficientFundsException { if (balance < amount) { throw new InsufficientFundsException("Insufficient balance."); } balance -= amount; }

第5章 Java常用类库

5.1 字符串处理

Java中处理字符串的类主要有StringStringBuilderStringBuffer

  • String类String是一个不可变类,一旦创建就不能修改。

    String greeting = "Hello"; greeting = greeting + " World!"; System.out.println(greeting); // 输出: Hello World!

  • StringBuilder和StringBuffer: 这两个类用于可变字符串操作,StringBuilder在单线程环境下使用,而StringBuffer是线程安全的。

    StringBuilder sb = new StringBuilder("Hello"); sb.append(" World!"); System.out.println(sb.toString()); // 输出: Hello World!

5.2 集合框架

Java集合框架提供了多种数据结构,如ListSetMap等,用于存储和操作数据。

  • List接口:有序集合,允许重复元素。常用实现类有ArrayListLinkedList

    List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("apple");

  • Set接口:无序集合,不允许重复元素。常用实现类有HashSetTreeSet

    Set<String> set = new HashSet<>(); set.add("apple"); set.add("banana");

  • Map接口:键值对映射,键不能重复。常用实现类有HashMapTreeMap

    Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2);

5.3 输入输出流(I/O)

Java的I/O操作涉及到读取和写入数据的流。

  • File类:用于表示文件和目录路径名。

    File file = new File("example.txt"); if (file.exists()) { System.out.println("File exists"); }

  • 字节流与字符流InputStreamOutputStream用于处理字节数据,而ReaderWriter用于处理字符数据。

    FileInputStream fis = new FileInputStream("example.txt"); int data = fis.read(); while (data != -1) { System.out.print((char) data); data = fis.read(); } fis.close();

  • 序列化与反序列化:通过ObjectOutputStreamObjectInputStream可以实现对象的序列化与反序列化。

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat")); oos.writeObject(new Person("John", 25)); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat")); Person person = (Person) ois.readObject(); ois.close();

第6章 多线程编程

6.1 线程的基本概念

线程是程序执行的最小单元。Java中的每个线程都通过继承Thread类或实现Runnable接口来实现。

  • 创建线程

    public class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } } MyThread thread = new MyThread(); thread.start();

    或者:

    public class MyRunnable implements Runnable { public void run() { System.out.println("Runnable is running"); } } Thread thread = new Thread(new MyRunnable()); thread.start();

6.2 线程的生命周期

线程的生命周期包括以下状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)。

  • 线程控制
    • sleep():使线程暂停指定时间。
    • join():等待线程终止。
    • yield():让出CPU执行权给其他线程。

    thread1.join();

6.3 线程同步与线程安全

在多线程环境下,如果多个线程同时访问同一个共享资源,可能会出现数据不一致的问题。Java提供了同步方法同步代码块来保证线程安全。复制代码

  • public synchronized void increment() { count++; }

  • 同步代码块

     

    public void increment() { synchronized(this) { count++; } }

  • 线程通信:通过wait()notify()notifyAll()实现线程间的通信。

     

    synchronized(this) { while(condition) { wait(); } // 执行某些操作 notifyAll(); }

第7章 网络编程

7.1 网络基础

Java网络编程基于TCP/IP协议栈,可以通过SocketServerSocket类实现客户端和服务器之间的通信。

  • IP地址和端口号:IP地址用于标识网络中的设备,端口号用于标识应用程序。
  • TCP与UDP:TCP(传输控制协议)提供可靠的、面向连接的通信,而UDP(用户数据报协议)提供不可靠的、无连接的通信。

7.2 Java中的网络编程

  • Socket编程:用于实现客户端和服务器之间的双向通信。

    // 客户端 Socket socket = new Socket("localhost", 8080); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("Hello, Server!"); // 服务器 ServerSocket serverSocket = new ServerSocket(8080); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String message = in.readLine(); System.out.println("Received: " + message);

  • URL与URLConnection:用于通过HTTP协议访问网络资源。

     

    URL url = new URL("http://example.com"); URLConnection conn = url.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } in.close();

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值