java怎么使用

java怎么使用

安装JDK后,用文本编辑器写Java代码(如public class Main { public static void main(String[] args {} }),通过javac编译成.class文件...

优惠价格:¥ 0.00
当前位置:首页 > 后端开发 > java怎么使用
详情介绍
安装JDK后,用文本编辑器写Java代码(如 public class Main { public static void main(String[] args) {} }),通过 javac编译成.class文件

Java运行环境搭建

1 JDK安装与配置

核心步骤
| 操作系统 | 下载链接 | 关键操作 |
|—————-|——————————|————————————————————————–|
| Windows | Oracle官网/OpenJDK | ① 下载安装包 → ② 设置JAVA_HOME环境变量 → ③ 将%JAVA_HOME%bin加入Path |
| macOS/Linux | Homebrew (brew install java)| 自动完成路径配置 |
| Ubuntu/Debian | sudo apt install openjdk-17| 命令行直接安装 |

验证安装:终端输入java -version应显示版本号,javac命令可执行编译。

2 集成开发环境(IDE)选择

工具 特点 适用场景
IntelliJ IDEA 智能提示强,插件生态丰富 企业级项目开发
Eclipse 开源免费,支持多种语言 教学场景/轻量级项目
VS Code + Java插件 轻量化,启动速度快 快速脚本编写/学习过渡期

Java基础语法详解

1 数据类型与变量定义

类别 示例 默认值 内存占用
基本类型 int age = 25; int→0, float→NaN int:4字节
引用类型 String name = "John"; null 堆区地址指针
包装类 Integer count = 10; 自动装箱拆箱 对象头+实际数据

注意char占2字节(Unicode编码),boolean不参与数值运算。

2 流程控制语句

// 三种循环对比
for (int i = 0; i < 5; i++) { ... }       // 明确次数时首选
while (condition) { ... }                // 条件满足即执行
do { ... } while (condition);            // 至少执行一次

跳转语句break终止当前循环/switch,continue跳过本次剩余代码进入下一轮。

3 数组与集合操作

操作 传统数组 ArrayList优势
动态扩容 固定长度 自动增长(底层ArrayCopy)
元素类型限制 单一类型 允许null和混合类型
常用方法 length属性 add(), get(), remove()等

示例代码:

// 创建并初始化数组
int[] scores = new int[]{90, 85, 78};
System.out.println("最高分: " + Arrays.stream(scores).max().getAsInt());
// 使用List集合
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.forEach(System.out::println); // Lambda表达式遍历

面向对象编程核心

1 类与对象的生命周期

阶段 触发时机 典型行为
加载 首次使用 JVM加载.class文件到内存
实例化 new关键字调用构造器 分配堆区内存,初始化字段
销毁 GC回收无引用对象 finalize()方法可选执行

构造器重载示例

public class Person {
    private String name;
    private int age;
    // 无参构造器
    public Person() {}
    // 全参构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

2 继承与多态实现

// 父类声明为abstract强制子类实现抽象方法
abstract class Animal {
    abstract void makeSound();
}
class Dog extends Animal {
    @Override
    void makeSound() { System.out.println("汪汪"); }
}
// 多态应用
Animal pet = new Dog();
pet.makeSound(); // 输出"汪汪"

3 接口与抽象类区别

特性 接口 抽象类
成员变量 public static final 普通成员变量
方法实现 只能声明不能实现 可提供默认实现
多继承能力 支持多个接口 Java单继承限制
设计目的 定义行为规范 复用公共代码模板

高级特性与最佳实践

1 异常处理机制

try {
    FileReader fr = new FileReader("data.txt");
} catch (FileNotFoundException e) {
    System.err.println("文件不存在: " + e.getMessage());
} finally {
    // 资源释放逻辑(推荐使用try-with-resources)
}

自定义异常示例

class InvalidAgeException extends Exception {
    public InvalidAgeException(String msg) { super(msg); }
}
void checkAdult(int age) throws InvalidAgeException {
    if (age < 18) throw new InvalidAgeException("未成年禁止访问");
}

2 泛型编程规范

类型擦除警告:运行时无法获取具体类型参数,需通过instanceof判断。

正确用法:

// 带通配符的上限限定
List<? extends Number> numbers = new ArrayList<Integer>();
numbers.add(null); // 唯一允许添加的元素

3 注解与反射应用

内置注解 作用场景 示例
@Override 标识重写父类方法 @Override public String toString()
@Deprecated 标记过时API @Deprecated public void oldMethod()
@SuppressWarnings 抑制特定警告信息 @SuppressWarnings("unchecked")

反射获取类信息

Class<Person> clazz = Person.class;
Constructor<Person> ctor = clazz.getConstructor(String.class, int.class);
Person p = ctor.newInstance("Tom", 25);

标准库常用组件

1 集合框架体系

接口/类 特点 适用场景
List 有序可重复,允许null 按索引访问元素
Set 无序不可重复,null最多一个 去重/交集/差集运算
Map 键值对存储,键不可重复 快速查找关联关系
Deque 双端队列,两头都可进出 栈/队列混合使用场景

性能对比

  • HashMap查询O(1),但无序;TreeMap按键排序,红黑树实现。
  • ArrayList随机访问快,LinkedList频繁增删效率高。

2 I/O流操作

流类型 特点 典型用途
FileInputStream 字节流读取文件 图片/视频等二进制数据处理
BufferedReader 缓冲字符流,提高读写效率 逐行读取文本文件
ObjectOutputStream 序列化对象到文件 持久化复杂对象状态

NIO非阻塞I/O

Path path = Paths.get("example.txt");
Files.lines(path).forEach(System.out::println); // Java 8新特性

完整开发流程示例

1 简单控制台程序

import java.util.Scanner;
public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入第一个数字: ");
        int num1 = scanner.nextInt();
        System.out.print("请输入第二个数字: ");
        int num2 = scanner.nextInt();
        System.out.printf("%d + %d = %dn", num1, num2, num1 + num2);
    }
}

2 Maven项目管理

pom.xml依赖配置示例:

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

相关问答FAQs

Q1: 为什么会出现ClassNotFoundException

A: 此异常表示JVM在类路径中找不到指定的类文件,常见原因包括:① 未将包含该类的目录/JAR包添加到类路径;② 类名拼写错误(区分大小写);③ 使用了错误的包声明,解决方案:检查CLASSPATH环境变量,确认编译后的.class文件位置,或在IDE中重新配置构建路径。

Q2: 如何处理数组越界异常ArrayIndexOutOfBoundsException

A: 该异常发生在访问数组索引超出0~length-1范围时,预防措施:① 访问前使用array.length判断边界;② 改用List集合替代数组;③ 在循环中使用增强for循环(for(type element : array))。

int[] arr = {1,2,3};
for(int i=0; i<arr.length; i++){ // 安全写法
    System.out.println(arr[
0