一、基础语法
-
数据类型
-
基本数据类型:
-
整数类型:包括 byte(1 字节,范围是 - 128 到 127)、short(2 字节,范围是 - 32768 到 32767)、int(4 字节,范围是 - 2147483648 到 2147483647)和 long(8 字节)。例如,定义一个 int 类型的变量
int num = 10;
。 -
浮点类型:float(4 字节)和 double(8 字节)。float 类型的数值后面需要加
f
或F
,如float f = 3.14f;
,而 double 类型可以直接写数值,如double d = 3.1415926;
。 -
字符类型:char(2 字节),用于表示单个字符,用单引号括起来,如
char c = 'A';
。 -
布尔类型:boolean,只有
true
和false
两个值,用于逻辑判断,如boolean flag = true;
。
-
-
引用数据类型:包括类、接口、数组等。例如,定义一个字符串(String 是一个类,属于引用数据类型)
String str = "Hello";
。
-
-
变量和常量
-
变量:是程序运行过程中可以改变的值的存储单元。变量在使用前需要先声明,声明格式为数据类型 + 变量名,如
int age;
,然后可以对变量进行赋值,age = 20;
也可以在声明时同时赋值int height = 170;
。 -
常量:是程序运行过程中不能改变的值。在 Java 中,用
final
关键字定义常量,例如final double PI = 3.14159;
,一旦定义后,PI 的值就不能再被修改。
-
-
运算符
-
算术运算符:包括加(+)、减(-)、乘(*)、除(/)、取余(%)。例如,
int a = 10, b = 3; int result1 = a + b;
(结果为 13),int result2 = a % b;
(结果为 1)。 -
关系运算符:用于比较两个值,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。返回值是布尔类型,如
boolean compare = (5 > 3);
(结果为true
)。 -
逻辑运算符:用于连接多个布尔表达式,包括与(&&)、或(||)、非(!)。例如,
boolean andResult = (true && false);
(结果为false
),boolean orResult = (true || false);
(结果为true
)。 -
位运算符:对整数的二进制位进行操作,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)和无符号右移(>>>)。例如,
int num1 = 5; //二进制为0101,int num2 = 3; //二进制为0011,int bitAndResult = num1 & num2;
(结果为 1,二进制为 0001)。
-
-
控制语句
-
条件语句:
-
if - else 语句:根据条件执行不同的代码块。例如,
if (age >= 18) { System.out.println("成年人"); } else { System.out.println("未成年人"); }
。 -
switch 语句:用于多分支选择,它根据表达式的值来匹配多个
case
常量。例如,int day = 3; switch(day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; default: System.out.println("其他"); break; }
。
-
-
循环语句:
-
for 循环:用于已知循环次数的情况。格式为
for(初始化表达式; 条件表达式; 更新表达式) {循环体}
。例如,for(int i = 0; i < 10; i++) { System.out.println(i); }
会输出 0 到 9。 -
while 循环:在条件为真时执行循环体。例如,
int j = 0; while(j < 5) { System.out.println(j); j++; }
会输出 0 到 4。 -
do - while 循环:先执行一次循环体,然后再判断条件。例如,
int k = 0; do { System.out.println(k); k++; } while(k < 3);
会输出 0、1、2。
-
-
二、面向对象编程(OOP)概念
-
类和对象
-
类:是一种抽象的数据类型,用于定义对象的属性和行为。例如,定义一个
Person
类,包含属性(成员变量)name
和age
,以及行为(方法)speak
。
-
class Person {String name;int age;void speak() {System.out.println("我叫" + name + ", 我今年" + age + "岁。");} }
-
对象:是类的实例。可以通过
new
关键字创建对象,例如Person p = new Person(); p.name = "张三"; p.age = 20; p.speak();
。
-
封装、继承和多态
-
封装:是将数据(属性)和操作数据的方法封装在一起,对外部隐藏实现细节。在 Java 中,通过访问修饰符(
private
、protected
、public
)来控制访问权限。例如,将Person
类中的name
和age
属性设为private
,并提供public
的get
和set
方法来访问和修改属性。
-
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;}void speak() {System.out.println("我叫" + name + ", 我今年" + age + "岁。");} }
-
继承:是一种创建新类(子类)的方式,子类继承父类的属性和方法。例如,定义一个
Student
类继承Person
类,Student
类可以继承Person
类的name
和age
属性以及speak
方法,并且可以添加自己的属性和方法。
class Student extends Person {int grade;void study() {System.out.println("我是" + grade + "年级的学生。");} }
-
多态:是指同一个行为具有多种不同表现形式。在 Java 中有两种实现方式,方法重载和方法重写。
-
方法重载:是在同一个类中,方法名相同,但参数列表不同(参数个数、类型、顺序不同)。例如,在一个
Calculator
类中有两个add
方法,int add(int a, int b) { return a + b; }
和double add(double a, double b) { return a + b; }
。 -
方法重写:是在子类中重新定义父类中已经存在的方法,方法签名(方法名、参数列表、返回类型)必须相同。例如,
Student
类重写Person
类的speak
方法,@Override void speak() { System.out.println("我是学生,我叫" + name + ", 我今年" + age + "岁。"); }
。
-
三、异常处理
-
异常类型
-
检查异常(Checked Exception):是编译器要求必须处理的异常,例如
IOException
(用于处理输入输出异常)。如果一个方法可能抛出检查异常,要么在方法内部用try - catch
块处理,要么在方法声明中用throws
关键字声明抛出异常。 -
运行时异常(Runtime Exception):是在程序运行过程中可能出现的异常,例如
NullPointerException
(空指针异常)、ArrayIndexOutOfBoundsException
(数组下标越界异常)。这些异常可以不进行显式处理,但为了程序的健壮性,最好还是进行处理。
-
-
异常处理机制
-
try - catch - finally 块:
try
块中放置可能抛出异常的代码,catch
块用于捕获并处理异常,finally
块中的代码无论是否发生异常都会执行。例如,
-
try {int[] arr = new int[3];System.out.println(arr[5]); } catch (ArrayIndexOutOfBoundsException e) {System.out.println("数组下标越界"); } finally {System.out.println("这部分代码总会执行"); }
四、集合框架
-
List 接口
-
ArrayList:是一个动态数组,它可以自动扩容。可以通过索引访问元素,元素可以重复。例如,
-
ArrayList<String> list = new ArrayList<>(); list.add("苹果"); list.add("香蕉"); System.out.println(list.get(0));
-
LinkedList:是一个双向链表实现的集合,它在插入和删除元素时效率较高,特别是在列表头部或尾部操作。例如,
LinkedList<Integer> linkedList = new LinkedList<>(); linkedList.addFirst(1); linkedList.addLast(2);
。
-
Set 接口
-
HashSet:是基于哈希表实现的集合,它不允许元素重复,元素的存储顺序是无序的。例如,
HashSet<String> set = new HashSet<>(); set.add("红色"); set.add("蓝色");
。 -
TreeSet:是基于红黑树实现的集合,它不允许元素重复,并且元素是按照自然顺序或者自定义比较器进行排序的。例如,
TreeSet<Integer> treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(1);
(元素会按照从小到大的顺序存储)。
-
-
Map 接口
-
HashMap:是基于哈希表实现的键值对集合,键是唯一的,值可以重复。例如,
HashMap<String, Integer> map = new HashMap<>(); map.put("张三", 20); map.put("李四", 22);
。 -
TreeMap:是基于红黑树实现的键值对集合,键按照自然顺序或者自定义比较器进行排序。例如,
TreeMap<String, Integer> treeMap = new TreeMap<>(); treeMap.put("王五", 25); treeMap.put("赵六", 23);
(键会按照字典顺序排序)。
-
五、输入输出(I/O)操作
-
字节流和字符流
-
字节流:用于处理二进制数据,以字节为单位进行读写。例如,
FileInputStream
用于从文件中读取字节数据,FileOutputStream
用于向文件中写入字节数据。
-
try {FileInputStream fis = new FileInputStream("input.txt");int data;while((data = fis.read())!= - 1) {System.out.print((char)data);}fis.close(); } catch (IOException e) {e.printStackTrace(); }
-
字符流:用于处理文本数据,以字符为单位进行读写。例如,
FileReader
用于从文件中读取字符数据,FileWriter
用于向文件中写入字符数据。
try {FileReader fr = new FileReader("input.txt");int c;while((c = fr.read())!= - 1) {System.out.print((char)c);}fr.close(); } catch (IOException e) {e.printStackTrace(); }
-
缓冲流
-
缓冲流是在字节流和字符流的基础上增加了缓冲功能,可以提高读写效率。例如,
BufferedReader
用于缓冲字符输入流,BufferedWriter
用于缓冲字符输出流,BufferedInputStream
用于缓冲字节输入流,BufferedOutputStream
用于缓冲字节输出流。
-
try {BufferedReader br = new BufferedReader(new FileReader("input.txt"));String line;while((line = br.readLine())!= null) {System.out.println(line);}br.close(); } catch (IOException e) {e.printStackTrace(); }