背景知识

先理清几个基本概念。Ja va有三个版本:Ja vaSE是标准版,用来开发桌面应用;Ja vaEE是企业版,支撑企业级应用;Ja vaME是微型版,面向嵌入式设备和移动设备。这三个版本分别对应不同场景,但核心语法都是相通的。

编译与运行是Ja va程序的两大阶段。编译时,我们用ja vac.exe工具把.ja va源文件编译成.class字节码文件。命令很简单:ja vac 文件名.ja va,如果需要指定编译后存放路径,可以加上-d参数。运行阶段,用ja va.exe执行.class文件,注意命令后面跟的是类名,不带.class后缀。这一切都依托于JVM(Ja va虚拟机),它在运行时负责解释执行字节码。

开发环境方面,JDK(Ja va开发工具包)包含了编译器、调试器等全套工具;JRE(Ja va运行环境)只包含JVM和运行所需的库;而JVM就是那个执行字节码的虚拟机。三者关系是:JDK包含JRE,JRE包含JVM。

工具与格式里有个小工具native2ascii,用于将Unicode字符转成u开头的ASCII表示。UML(统一建模语言)则用于面向对象设计,其中的箭头含义:空心箭头指向父类(继承),空心虚线箭头指向接口(实现),实心实线箭头表示关联关系。

注释有三种://单行注释,/* */多行注释,/** */文档注释(用于生成帮助文档)。

类与方法结构的基本框架如下:

类体 {
    方法体 {
        ja va语句;
    }
}

总结一下:Ja vaSE是基础,Ja vaEE是企业版,Ja vaME是微型版;编译用ja vac,运行用ja va;JDK是开发工具包,JRE是运行环境,JVM是虚拟机;UML用来画设计图,注释用来写说明。类和方法的结构就是上面那个样子。

一、集成开发环境(IDEA)

IDEA是Ja va开发中最常用的IDE之一,下面整理一下它的组织方式和常用快捷键。

组织方式

IDEA的工程结构分为三层:Project(工程)是最高层级,包含多个模块;Module(模块)是工程下的子模块,包含多个包;Package(包)是模块下的子包,用于组织类和资源。

字体设置

路径:File -> Settings -> Font,可以调整编辑器的字体样式和大小。

快捷键分类总结

导航与操作

编辑与格式化

运行与纠错

窗口操作

总结

工程-模块-包的三层结构清晰明了,便于管理。快捷键方面,导航与查找能快速定位,编辑与格式化提高编写效率,运行与纠错帮你快速调试,窗口操作优化布局。熟练掌握这些快捷键,开发效率能上一个大台阶。

二、JVM内存划分

JVM的内存区域是理解Ja va程序运行机制的关键。局部变量在方法体中声明,运行时在栈中分配内存。方法区内存最早有数据——类加载时字节码文件就被放到方法区,调用方法时再在栈内分配空间。堆内存用来存放new出来的对象,成员变量中的实例变量(每个对象一份)就存储在对象内部,只能通过引用来操作。栈内存存储局部变量,栈帧永远指向栈顶,先进后出,后进先出。

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

内存区域与数据存储

  1. 堆内存(Heap):存储实例变量(对象属性)。每个JVM实例只有一个堆,所有线程共享。垃圾回收器(GC)主要针对堆内存进行回收。
  2. 方法区(Method Area):存储静态变量(类变量)和类元数据(类信息、常量池等)。每个JVM实例只有一个方法区,所有线程共享。方法区是最先有数据的内存区域,因为类加载时静态变量和类信息会初始化。
  3. 栈内存(Stack):存储局部变量和方法调用栈帧。每个线程有一个独立的栈,线程私有。栈内存使用最频繁,因为方法调用和局部变量的生命周期短。

变量存储位置

  1. 局部变量:存储在栈内存中,生命周期与方法调用一致,方法结束时销毁。
  2. 实例变量:存储在堆内存中,生命周期与对象一致,对象被垃圾回收时销毁。
  3. 静态变量:存储在方法区中,生命周期与类一致,类卸载时销毁。

垃圾回收器(GC)

GC主要针对堆内存,清理不再使用的对象。栈内存和方法区的垃圾回收机制与堆不同,但效率更高,因为它们的生命周期短且数据量小。

三、关键字

类与关键字

输入与输出

final关键字

super关键字

static关键字

包与导入

访问控制权限修饰符

总结

四、Ja va基础

标识符

标识符是用户有权命名的单词,包括类名、方法名、常量名、变量名、接口名等。命名规则:类名、接口名采用大驼峰(首字母大写,后面每个单词首字母大写);方法名、变量名采用小驼峰(首字母小写,后面每个单词首字母大写);常量名全部大写,单词间用下划线分隔。

字面值

字面值就是数据本身,比如数字、字符串,在IDE中通常以紫色显示。

变量

引用

引用是一个变量,可以是实例变量或局部变量。实例变量:类名 引用 = new 类名();;局部变量:引用 变量名 = new 引用();

数据类型

字符编码

发展顺序:ASCII < ISO-8859-1 < GB2312 < GBK < GB18030 < Big5 < Unicode。

位运算符

方法(函数)

定义格式:[修饰符列表] 返回值类型 方法名(形参列表) { 方法体; return; }。调用:类名.方法名(实参列表);。实例方法不带static,需要对象参与;静态方法带static,与对象无关。

方法重载(Overload)

在同一类中,方法名相同但参数列表不同,与返回值类型和修饰符列表无关。

方法递归

方法调用自身,每次递归都会压栈,分配新的内存空间。示例:

public static int sum(int n) {
    if (n == 1) {
        return 1;
    }
    return n + sum(n - 1);
}

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

方法覆盖(Override)

发生在继承关系中,子类重写父类方法。方法名、返回值类型、形参列表必须一致,访问权限不能比父类更低,抛出异常不能更多。私有方法、构造方法不能覆盖,静态方法不存在覆盖。

总结

五、Ja va 控制流与 Lambda 表达式

1.控制流语句

2.Ja va 标签

标签用于控制嵌套循环的跳转。语法:label:。用法:continue label;跳过当前循环继续执行标签处的循环;break label;结束标签处的循环。

3.Lambda 表达式

Lambda让代码更简洁,尤其在实现函数式接口时。下面是一些常见场景:

总结

六、面向对象

面向过程与面向对象的对比

面向对象的分析与设计

类与对象

User u = new User();
Address a = new Address();
u.addr = a;
Print(u.addr.city);
A.city = "天津";
Print(u.addr.city);

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

封装

私有化属性(private),通过gettersetter提供操作入口,可以在setter中添加业务逻辑进行安全控制。

构造方法

用于创建对象并初始化实例变量。语法:修饰符 构造方法名(形参) { 构造方法体; }。没有返回值类型,方法名与类名一致。如果没有定义构造方法,编译器会生成一个无参的缺省构造器。

继承

语法:class 子类名 extends 父类名。Ja va中类只能单继承。父类也叫基类、超类,子类也叫派生类。私有的属性和方法、构造方法不能被继承。通过继承链,子类可以间接继承父类的父类。如果没有显式继承,默认继承ja va.lang.Objectsuper关键字用于调用父类的属性、方法和构造方法。

多态

抽象类

使用abstract修饰,属于引用数据类型。不能使用privatefinal修饰。可以包含抽象方法和非抽象方法。不能实例化,但可以有构造方法供子类使用。抽象方法没有方法体,包含抽象方法的类一定是抽象类。非抽象类继承抽象类时,必须实现所有抽象方法。

接口

使用interface定义,是完全抽象的(特殊的抽象类)。只能包含常量和抽象方法(默认public static finalpublic abstract,可省略)。支持多继承,一个接口可以继承多个接口。类通过implements实现接口,一个类可以实现多个接口。接口支持多态,用于解耦合。

抽象类与接口的区别

特性抽象类接口
抽象程度半抽象(可以包含具体方法)完全抽象(只能包含抽象方法)
构造方法有构造方法,供子类使用无构造方法
继承单继承支持多继承
内容可以包含抽象方法和非抽象方法只能包含常量和抽象方法
用途抽象行为和数据主要抽象行为
实例化不能实例化不能实例化

开发中的选择

示例

abstract class Animal {
    abstract void sound();
    void sleep() { System.out.println("Sleeping..."); }
}
interface Flyable {
    void fly();
}
class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Chirp..."); }
    public void fly() { System.out.println("Flying..."); }
}

总结

七、类库

源码、字节码与帮助文档

Object类(根类)

System类

Arrays类

String类

构造方法:String(byte[])String(char[])String(String)。常用方法:charAtcompareTocontainsendsWithstartsWithequalsequalsIgnoreCasegetBytesindexOflastIndexOfisEmptyreplacesubstringtoCharArraytoLowerCasetoUpperCasesplittrimvalueOf

StringBuffer与StringBuilder

包装类

将基本数据类型转换为对象,如IntegerCharacter。常用方法:intValue()拆箱,parseInt(String)字符串转整数。

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

日期相关类

数字相关类

枚举(Enum)

定义一组常量:enum Season { SPRING, SUMMER, AUTUMN, WINTER }

内部类

总结

八、数组

一维数组

二维数组

总结

九、算法

排序算法

查找算法

总结

十、异常

1. 异常的基本概念

2. 常见运行时异常

3. 异常处理方式

4. 常用异常方法

5. 自定义异常

6. 异常处理的最佳实践

总结

十一、I/O

I/O概述

I/O(输入/输出)是应用程序与外部设备的数据交互。Ja va通过ja va.io包提供丰富的类库,支持文件操作、字节流、字符流等。

File类

File是唯一代表磁盘文件本身的对象。构造方法:File(String path)File(String parent, String child)File(File parent, String child)。常用方法:exists()delete()createNewFile()getName()getPath()getAbsolutePath()canRead()canWrite()isFile()isDirectory()length()list()listFiles()createTempFile()deleteOnExit()

字节流

字节流用于处理二进制数据。InputStream是字节输入流抽象类,OutputStream是字节输出流抽象类。常用实现类:FileInputStreamFileOutputStream。读写方法:read()read(byte[])write(int)write(byte[])flush()close()

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

字符流

字符流用于处理文本数据,以字符为单位,支持字符编码。ReaderWriter是抽象基类。常用实现类:FileReaderFileWriterBufferedReader(提供readLine())、BufferedWriter(提供newLine())、InputStreamReaderOutputStreamWriter(支持指定编码)。

字符流与字节流的区别

总结

十二、集合

集合的特点

集合是存储一组对象的容器,存储的是对象的内存地址。不同的集合对应不同的数据结构,所有集合类都在ja va.util包中。

集合的层次结构

常用实现类

集合的选择

总结

十三、泛型

1. 泛型概述

泛型是JDK 5.0引入的新特性,用于统一集合中元素的类型,只在编译阶段起作用,编译后类型擦除。语法:List list = new ArrayList();

2. 优点与缺点

3. 自动推断机制(钻石表达式)

JDK 7开始,后面的泛型类型可以省略:List list = new ArrayList<>();

4. 自定义泛型

5. 通配符

6. 限制

总结

十四、多线程

进程是应用程序,线程是进程中的执行单元。并行是多个CPU同时执行,并发是单个CPU交替执行。

线程状态转换

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

实现线程的三种方式

  1. 继承Thread类:简单,但受单继承限制。
  2. 实现Runnable接口:灵活,避免单继承限制。
  3. 使用Callable和Future:可以获取线程执行结果,支持异常处理。

线程常用方法

线程安全问题

多线程并发、有共享数据、有修改行为时会产生线程安全问题。解决方案:线程同步(排队执行),使用synchronized关键字。

死锁

死锁是多个线程互相等待对方释放锁,导致无法继续执行。四个必要条件:互斥、占有并等待、不可抢占、循环等待。避免死锁:避免嵌套锁、按顺序获取锁、使用超时机制。

守护线程

守护线程依赖用户线程,当所有用户线程结束时自动退出。典型代表:垃圾回收线程。通过setDaemon(true)设置,必须在start()之前。

定时器

ja va.util.Timer用于间隔特定时间执行任务。实际开发中更多使用Spring Task框架。

wait()和notify()

wait()让当前线程等待并释放锁,notify()唤醒等待线程。它们必须在同步块中调用,是Object类的方法。

生产者消费者模式

生产线程和消费线程通过wait()notify()实现均衡。典型应用:仓库最多存储一个元素,生产一个消费一个。

Ja va入门到精通的学习笔记:零基础如何快速学会Ja va开发?

十五、反射

1. Class 对象

每个类加载到内存时都会生成一个Class对象,存储了类的所有信息。反射通过Class对象在运行时动态获取类的信息并操作成员。

2. 生成方式

3. 常用方法

4. 静态加载与动态加载

总结

十六、小游戏(进击的小鸟)

这是一个完整的Ja va小游戏项目,包含多个类:StartGame(游戏入口)、BirdGame(主面板,负责绘制和逻辑)、Bird(小鸟类)、Column(管道类)、Ground(地面类)、Music(音乐播放)、Score(分数实体)、ScoreManager(JDBC连接数据库操作)。游戏通过鼠标控制小鸟飞行,躲避管道,得分并记录到数据库。代码结构清晰,适合初学者练习面向对象、多线程和数据库操作。

十七、Stream

Stream简介

Ja va 8引入的Stream API是对集合功能的增强,专注于高效的聚合操作,与Lambda表达式结合极大提高编程效率和可读性。

Stream原理

将元素集合看作流,在管道中传输,经过中间操作(如筛选、排序、聚合)后由最终操作得到结果。

Stream优点

操作三步

  1. 创建Stream(数据源)
  2. 中间操作链(处理数据)
  3. 终止操作(产生结果)

中间操作

终端操作

总结

本文转载于:https://www.jb51.net/program/368051lst.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。