邪修king头像
Java 零基础通关指南 —— 16 大核心考点全解析(期末急救版)封面图

Java 零基础通关指南 —— 16 大核心考点全解析(期末急救版)

在这里插入图片描述

观众老爷们大家好 我是邪修KING
Java期末急救-番外篇
带你急速通关JAVA基础

在C++完结已经过去一个多月了,目前我也正在学习算法,然而博客却更新的少之又少,接下来,我将继续更新技术博客,接下来的大一暑假Linux专栏也会开始持续更新,在此之前,先来总结一下Java的基础,同时也是为了应付期末考,我将结合我的理解,从C++学完的视角来进行快速过java期末考!作为过渡篇开始!在话不多说,让我们直接开始一篇的教学吧!

一、Java是什么

Java 是一门面向对象、跨平台的编程语言,它的“跨平台”靠的是 JVM(Java 虚拟机) —— 你写的 .java 源码编译成 .class 字节码,JVM 负责把字节码翻译成当前操作系统能执行的指令。所以“一次编写,到处运行”不是吹的。
第一个程序:

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

其中public class类名必须与文件名一致,然后再到main函数,这里再Idea(java编译器环境)中可以输入“main”回车-即可生成 public static void main(String[] args){};
System.out.println 是打印并换行,这里可以输入“sout”回车-即可生成。
注意:JDK、JRE、JVM 的关系(JDK 包含 JRE,JRE 包含 JVM)。
main 方法的写法(String[] args 能否换成 String args[]?可以,但推荐前者)。
注释:单行 //、多行 /* /、文档注释 /* */。

二、数据类型与变量–一切数据的“容器”

2.1考试只需要记住这六种就行了

byte:一字节长度;short:二字节长度;
int:四字节长度;long:八字节长度;
float:四字节长度;double:八字节长度
注意一个特殊符号:boolean:只存放true/false;如同C语言当中的bool,区别是用于判断正误的,常在if或者while中使用:用于接收一个条件式如:1>2,此时不成立,返回false推出;反之如此。

int age = 20;
double price = 99.9;
char grade = 'A';
boolean isPass = true;
String name = "张三";  // String 是引用类型

2.2类型转换

自动类型转换(小→大):int -> long -> float -> double
强制类型转换(大→小):可能丢失精度(不推荐)

byte a=2;
int b=(int)a;//显示强制类型转换;

三、运算符讲解:(重点)

3.1算数运算符

      • / %
        前三个和数学一样;
        整数除法结果为整数(截断),5/2;结果为2(取结果,不取余数)
        取模 % 结果符号与被除数相同,1234%10;结果为4(不取结果,取余数)
        注意:在编程中需要用变量接收:int a=1234%10;

3.2 赋值运算符

= += -= *= /= %=
a += 3 等价于 a = a + 3(但隐式强转,byte b=1; b+=1; 没问题,因为 += 自动强转)。

3.3 关系运算符

== != > < >= <=,结果 boolean。

3.4 逻辑运算符

&& || !(短路特性:&& 左假右不执行,|| 左真右不执行)。
&&(并且的意思,两个都要满足)||(或者的意思,其中一个满足即可)!(否则,常与=一起用,为不等于)

3.5 位运算符(了解)

& | ^ ~ << >> >>>,考试不深究,但知道 ^ 异或可交换两个数。

3.6 三元运算符

int max = (a > b) ? a : b;//意思是如果a>b?(如果成立则赋值a)a:(不成立则赋值b)

注意:只有位运算要了解,其他必须掌握!

符号注意点!

区分好标识符,关键字,保留字等,
标识符:不已数字开头,不能是public,class,int,这类特定含义的关键字,严格区分大小写;

四、分支与循环

这里提一嘴即可,C语言与其一模一样
if-else

if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

switch

switch (day) {
    case 1:
        System.out.println("周一");
        break;
    case 2:
        System.out.println("周二");
        break;
    default:
        System.out.println("其他");
}

别忘了break,否则会穿透(到下一个case或者default);
for循环

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

while循环

int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}

do-while

int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 10);

注意:break 与 continue
break:跳出当前循环。
continue:跳过本次循环剩余部分,进入下一次循环。
考点:循环嵌套(打印九九乘法表、菱形等)。
死循环写法:for(;😉 或 while(true)

五、Java输入输出-与用户交互

System.out.print()(不换行)、System.out.println()(换行)、System.out.printf()(格式化输出)。
输入:(重要!!!)
导包(相当于C语言当中的头文件):import java.util.Scanner//最前面开始导
看清楚下面注释即可;

import java.util.Scanner;  // 必须导包

Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine();      // 读取一行字符串
System.out.print("请输入年龄:");
int age = sc.nextInt();           // 读取整数
System.out.print("请输入成绩:");
double score = sc.nextDouble();
sc.close();  // 养成关闭习惯(非必须但良好)

了解:nextInt() 后调用 nextLine() 会读取到换行符,需要额外处理(加一个 sc.nextLine() 吃掉换行)
输入多个数据可用空格或回车分隔。

六、方法使用(方法就是函数,在JAVA里称方法)

6.1定义

[修饰符] 返回值类型 方法名(参数列表) {
    // 方法体
    return 返回值;
}

无返回值(void)

public static void sayHello(String name) {
    System.out.println("Hello, " + name);
}

有返回值(int)

public static int add(int a, int b) {
    return a + b;
}

6.2方法重载(Overload)

同一个类中,方法名相同,参数列表不同(类型、个数、顺序)。

public static int add(int a, int b) { return a+b; }
public static double add(double a, double b) { return a+b; }
public static int add(int a, int b, int c) { return a+b+c; }

注意:返回值类型不同不能构成重载。

6.3 递归

方法调用自身,必须有终止条件

// 阶乘
public static int factorial(int n) {
    if (n == 1) return 1;
    return n * factorial(n - 1);
}

递归效率低,但思想重要。

6.4 参数传递

// 交换两个数(错误示范)
public static void swap(int a, int b) { int tmp=a; a=b; b=tmp; } // 不会影响外部
// 若要交换,可用数组或对象包装。

七、调试(与考试无关,跳过,对JAVA感兴趣,向往这方向走的联系我)

八、数组的定义与使用

8.1数组声明

int[] arr;          // 推荐
int arr2[];

8.2初始化

// 动态初始化(指定长度,默认值)
int[] arr = new int[5];  // 元素全为0

// 静态初始化(直接赋值)
int[] arr2 = {1, 2, 3, 4, 5};
int[] arr3 = new int[]{1, 2, 3};

8.3长度与遍历

int len = arr.length;  // 属性,不是方法
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
// 增强 for(foreach)//这里不用管,是进阶的深度刨析方法
for (int num : arr) {
    System.out.println(num);
}

8.4多维数组(可跳过)

int[][] matrix = new int[3][4]; // 3行4列
// 或
int[][] matrix2 = {{1,2},{3,4},{5,6}};
// 遍历
for (int i = 0; i < matrix2.length; i++) {
    for (int j = 0; j < matrix2[i].length; j++) {
        System.out.print(matrix2[i][j] + " ");
    }
    System.out.println();
}

重点注意:数组下标从0开始,越界(一个数组有10个元素,若访问int a[10])报错:[]内指下标,越界访问!
数组是对象,声明时只是引用,必须 new 分配空间。

接下来难度升级,需要结合ai理解,如果没上过课或者没学过相关内容会炸!有C++基础的很舒服,需要结合课堂和其他内容相互理解,和idea一边操作,一边学习也可以,找我要资料也行!死记硬背根本不明白

九、类和对象

类:模板(蓝图),定义属性和行为。
对象:类的实例(具体实体)。

9.1定义类

public class Student {
    // 属性(成员变量)
    String name;
    int age;
    String grade;

    // 方法(行为)
    public void study() {
        System.out.println(name + " 正在学习");
    }

    public void showInfo() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}

9.2创建对象和调用

Student s = new Student();  // new 分配内存,调用构造方法
s.name = "小明";
s.age = 18;
s.study();

9.3构造方法(Constructor)(主要用于方便实例化类对象)

与类同名,无返回值(连 void 都不写)。
若未定义,系统提供默认无参构造。
可重载。

public class Student {
    String name;
    int age;
    // 无参构造
    public Student() {}
    // 有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

this 代表当前对象,用于区分成员变量和局部变量。

9.49.5 内存分析(简化)

栈:存储局部变量和引用。
堆:存储对象实例(成员变量在堆中)。
方法区:存储类信息、静态变量。

十、类和对象(二)—— 封装、static、代码块

10.1 封装(Encapsulation)
使用 private 修饰属性,提供 public 的 getter/setter 方法。

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) {
        if (age >= 0) this.age = age;
        else System.out.println("年龄不合法");
    }
}

10.2 static 关键字
静态变量:属于类,所有对象共享,类名直接访问。
静态方法:只能访问静态成员,不能使用 this。
静态代码块:类加载时执行一次,用于初始化静态资源。

public class MyClass {
    static int count = 0;  // 静态变量
    public static void showCount() {
        System.out.println(count);
    }
    static {
        System.out.println("静态代码块执行");
        count = 100;
    }
}

10.3 代码块
实例代码块:每次创建对象前执行(优先于构造方法)。
静态代码块:类加载时执行一次。
10.4 包(package)(相当于C语言当中的头文件,但区别是类包含,有着本质不同,可以结合理解)但一般不考
组织类,避免命名冲突。使用 import 导入其他包的类。
在这里插入图片描述

十一、继承–代码复用(父类和子类要搞清楚)

继承概念

继承(inheritance)机制:是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许程序员在保持原有类特性的基础上进⾏扩展,增加新功能,这样产⽣新的类,称派⽣类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复⽤。
例如:狗和猫都是动物,那么我们就可以将共性的内容进⾏抽取,然后采⽤继承的思想来达到共⽤

class 子类 extends 父类 { ... }

如果两个类出现一部分相同,则可以封装成一个父类animal进行继承使用,减少了代码浪费
如果两个类出现一部分相同,则可以封装成一个父类animal进行继承使用,减少了代码浪费
在这里插入图片描述

图片来源:比特就业课课件,切勿转载

// Animal.java
public class Animal{
String name;
int age;
public void eat(){
System.out.println(name + "正在吃饭");
}
public void sleep(){
System.out.println(name + "正在睡觉");
}
}
// Dog.java
public class Dog extends Animal{
void bark(){
System.out.println(name + "汪汪汪~~~");
}
}
// Cat.Java
public class Cat extends Animal{
void mew(){
System.out.println(name + "喵喵喵~~~");
}
}
// TestExtend.java
public class TestExtend {
public static void main(String[] args) {
Dog dog = new Dog();
// dog类中并没有定义任何成员变量,name和age属性肯定是从⽗类Animal中继承下来的
System.out.println(dog.name);
System.out.println(dog.age);
// dog访问的eat()和sleep()⽅法也是从Animal中继承下来的
dog.eat();
dog.sleep();
dog.bark();
}
}

从上述代码我们可以看到Dog类和Cat类的部分代码重复使⽤了Animal中的代码。

子类能继承什么?

继承 public 和 protected 成员(包括属性和方法)。
同包下继承默认访问权限成员。
不能继承 private 成员,但可通过 getter 访问。

super 关键字

访问父类成员:super.属性、super.方法()。
调用父类构造:super(参数) 必须放在子类构造方法第一行。

class Animal {
    String name;
    public Animal(String name) { this.name = name; }
    public void eat() { System.out.println(name + " 吃东西"); }
}

class Dog extends Animal {
    String breed;
    public Dog(String name, String breed) {
        super(name);  // 必须调用父类构造
        this.breed = breed;
    }
    public void bark() {
        System.out.println(name + " 汪汪叫");
    }
}

方法重写(Override)

子类重新定义父类的方法(方法名、参数、返回值相同,访问权限不能更严格)。
作用:用来调整对应子类能输出不同的函数,表明了事物的独特性

@Override  // 注解,建议写
public void eat() {
    System.out.println(name + " 吃狗粮");
}

注意:重写 vs 重载:重载在同一个类,重写在子类。

final 关键字

修饰类:不可被继承。
修饰方法:不可被重写。
修饰变量:常量(不可变)。

十二、多态 —— 同一个方法,不同行为

12.1 多态的前提

有继承关系。
子类重写父类方法。
父类引用指向子类对象(向上转型)。

Animal a = new Dog("小黑", "金毛");
a.eat();  // 实际执行 Dog 的 eat(),输出“小黑 吃狗粮”

12.2 编译时类型 vs 运行时类型

编译看左边(Animal 类中有 eat 方法才能编译)。
运行看右边(实际调用 Dog 的 eat)。

12.3 向下转型(强制转换)

Dog d = (Dog) a;  // 需确保 a 实际是 Dog 类型
d.bark();

多态的用处
参数多态:方法接收父类引用,可传入任何子类对象。
提高代码扩展性(开闭原则)。

12.4考点

多态与继承组合的题目,判断输出结果(注意方法调用顺序)(结合学习通和ai!!!很难,要么找我要资料!!!)。

十三、抽象类和接口 —— 规范与契约

13.1 抽象类(abstract)

含抽象方法的类必须声明为 abstract。
抽象方法只有声明,没有实现(public abstract void method();)。
抽象类不能实例化,但可以定义构造方法供子类调用。

abstract class Shape {
    public abstract double area();  // 抽象方法
    public void info() {
        System.out.println("这是一个形状");
    }
}

class Circle extends Shape {
    double radius;
    public Circle(double r) { radius = r; }
    @Override
    public double area() { return Math.PI * radius * radius; }
}

13.2接口(interface)

所有方法默认为 public abstract(JDK8 前)。
所有属性默认为 public static final(常量)。
实现用 implements,一个类可实现多个接口。

interface Drawable {
    void draw();  // 默认为 public abstract
}

interface Movable {
    void move(int x, int y);
}

class Car implements Drawable, Movable {
    @Override
    public void draw() { System.out.println("画汽车"); }
    @Override
    public void move(int x, int y) { System.out.println("移动到 (" + x + "," + y + ")"); }
}

13.3抽象类 vs 接口

抽象类有状态(属性),接口只能有常量。
抽象类可有具体方法,接口在 JDK8 后可用 default 和 static 方法。
类单继承,多实现。

13.4 常用接口示例

Comparable(排序)、Runnable(多线程)、Serializable(序列化)。

十四、字符串·String 类 —— 最常用的引用类型

14.1 String 的特点

不可变性(一旦创建,内容不可变,任何修改都会产生新对象)。
底层是 char[](JDK9 后为 byte[])。

14.2 创建方式

String s1 = "hello";               // 字面量,存在字符串常量池
String s2 = new String("hello");   // new 对象,在堆中

14.3 常用方法(必考!!!)

String str = "Hello World";
int len = str.length();               // 长度
char c = str.charAt(0);               // 'H'
int idx = str.indexOf("World");       // 6
String sub = str.substring(6);        // "World"
String lower = str.toLowerCase();     // "hello world"
String upper = str.toUpperCase();     // "HELLO WORLD"
String[] parts = str.split(" ");      // ["Hello","World"]
boolean b = str.startsWith("He");     // true
boolean b2 = str.contains("Wo");      // true
String trimmed = "  abc  ".trim();    // "abc"

记忆表格

方法调用返回值类型功能含义示例结果考试高频考点
str.length()int获取字符串字符总长度(空格、符号都算)11区分:数组length属性,字符串length()方法
str.charAt(下标)char获取指定下标位置的单个字符str.charAt(0) → ‘H’下标越界会抛异常
str.indexOf(“子串”)int查找子串首次出现的起始下标,找不到返回 -1indexOf(“World”) → 6常考判断是否包含、截取字符串
str.substring(start)String从 start 下标开始,截取到字符串末尾substring(6) → “World”左闭区间 [start, 末尾]
str.substring(start,end)String截取 [start,end) 区间字符(包含 start,不包含 end)substring(0,5) → “Hello”期末必考区间规则
str.toLowerCase()String全部字母转小写,原字符串不变“hello world”String 不可变,必须用变量接收结果
str.toUpperCase()String全部字母转大写“HELLO WORLD”验证码、校验场景常考
str.split(“分割符”)String[]按指定符号切割字符串,返回字符串数组split(" ") → [“Hello”,“World”]空格、逗号分割是大题常客
str.startsWith(“前缀”)boolean判断字符串是否以指定内容开头startsWith(“He”) → true布尔返回值,if 判断常用
str.contains(“子串”)boolean判断字符串是否包含指定子串contains(“Wo”) → true模糊匹配判断
" abc ".trim()String去除字符串首尾空格,中间空格保留“abc”表单去空格基础操作

在这里插入图片描述
核心易错点(考试丢分重点)
String 是不可变字符串,所有操作(转大小写、截取、切割)都会生成新字符串,原字符串不会改变,必须赋值接收结果;
substring(start, end) 左取右不取;
indexOf 找不到目标返回 -1,可用来判断是否包含;
比较字符串内容统一用 equals(),== 只比较地址;
length() 是方法带括号,数组 arr.length 是属性无括号。

这里背了就有分!但要理解,知道!

十五、异常

15.1异常处理方式

try-catch-finally

try {
    int[] arr = new int[5];
    System.out.println(arr[10]);  // 可能越界
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("数组越界:" + e.getMessage());
} finally {
    System.out.println("无论如何都会执行");
}

throws(向上抛出)

public void readFile() throws IOException {
    // 不处理,交给调用者
}

throw(手动抛出)

if (age < 0) {
    throw new IllegalArgumentException("年龄不能为负数");
}

15.3 自定义异常

class MyException extends Exception {
    public MyException(String msg) { super(msg); }
}
// 使用
throw new MyException("自定义错误");

finally 常见问题
finally 中通常释放资源(关闭文件、数据库连接)。
如果 finally 中有 return,会覆盖 try 中的 return。

十六、常用工具类介绍

包装类(Wrapper)
基本类型 → 引用类型(Integer、Double、Character、Boolean 等)。
自动装箱:Integer i = 100;
自动拆箱:int a = i;

Integer i1 = Integer.valueOf(100);
int i2 = i1.intValue();
// 字符串转数字
int num = Integer.parseInt("123");

Arrays 类(数组工具)

int[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr);               // 排序
int index = Arrays.binarySearch(arr, 8); // 二分查找(先排序)
String str = Arrays.toString(arr); // 数组转字符串
int[] copy = Arrays.copyOf(arr, arr.length);
boolean eq = Arrays.equals(arr, copy);

Collections 类(集合工具)
针对 List、Set、Map 等(集合在进阶课程,但期末可能提)。
Collections.sort(list)
Collections.reverse(list)
Collections.shuffle(list)
Math类

Math.max(a, b);
Math.min(a, b);
Math.pow(2, 3);   // 8.0
Math.sqrt(9);     // 3.0
Math.random();    // [0.0, 1.0) 随机数

Date 与 LocalDateTime(时间日期)
旧版 Date、SimpleDateFormat,新版 java.time(推荐)。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

LocalDate now = LocalDate.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = now.format(fmt);  // 2026-07-11

Scanner(输入)和 System(输出)——前面已经讲过
Random 类

Random rand = new Random();
int num = rand.nextInt(100);  // 0~99
double d = rand.nextDouble(); // 0.0~1.0

最后冲刺建议
动手敲代码:每节的示例至少自己写一遍,不要只看。
理清关系:继承、多态、抽象、接口这些概念要画图理解。
利用好ai:让它给出个代码例子给你,简单理解
学习通:结合学习通题目进行作业
Java 并不难,只要把基础打牢,考试就是“照葫芦画瓢”。
在这里插入图片描述

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/mogreat/article/details/162787849

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--