Java基础精讲:第一篇(语言特点到instanceof)

作者:董李阳
分类:Java基础 | 面试总结 | 学习笔记

1️⃣ Java语言有哪些特点?

Java自1995年诞生以来,凭借其稳定性和跨平台能力成为企业级开发的主流语言之一。以下是Java的五大核心特性:

  1. 简单易学,类库丰富
    语法接近C/C++,但去除了指针、多重继承等复杂概念;提供庞大的标准库(如java.util、java.io、java.net),提升开发效率。

  2. 面向对象(OOP)
    支持封装、继承、多态三大特性,强调“万物皆对象”,有助于构建模块化、高内聚低耦合的系统。这是Java最重要的设计思想。

  3. 平台无关性(Write Once, Run Anywhere)
    通过JVM(Java虚拟机)实现跨平台运行。Java源码编译为.class字节码,在任意安装了JVM的平台上均可执行。

  4. 可靠与安全
    强类型检查、自动内存管理(GC)、异常处理机制保障程序稳定性;JVM提供沙箱环境、类加载机制防止恶意代码入侵。

  5. 支持多线程
    内置对多线程的支持(Thread类和Runnable接口),能有效利用CPU资源,适用于高并发场景(如Web服务、后台任务)。

📌 小贴士:Java的“一次编写,到处运行”得益于JVM抽象层,不同操作系统上的JVM会将字节码翻译成本地机器指令。

2️⃣ 面向对象 vs 面向过程的区别?

对比维度面向过程(Procedure-Oriented)面向对象(Object-Oriented)
核心思想分析问题的解决步骤,用函数一步步实现流程将问题分解为多个“对象”,描述对象在解决问题中的行为
典型代表语言C、PascalJava、C++、Python
性能表现⭐⭐⭐⭐⭐ 更贴近硬件,执行效率高⭐⭐⭐☆ 性能略低(因有对象开销、动态绑定等)
适用场景单片机、嵌入式系统、资源受限环境大型软件、Web应用、GUI程序、团队协作项目
维护性修改困难,容易牵一发而动全身易于扩展、复用、维护(封装+继承+多态)
耦合度高(函数间依赖强)低(通过接口通信,松耦合)

🎯 举个例子:

  • 面向过程:做菜 = 买菜 → 洗菜 → 切菜 → 炒菜 → 上桌(按步骤调用函数)
  • 面向对象:厨师、食材、锅具都是对象,“炒菜”是厨师的一个行为,食材有自己的属性和状态。

✅ 总结:面向对象更适合复杂系统的建模,虽然性能稍逊,但在可维护性和扩展性上优势明显。

3️⃣ 八种基本数据类型的大小及封装类

Java有8种基本数据类型,它们不依赖于具体平台(与C不同),具有固定的大小和默认值。

基本类型大小(字节)默认值封装类
byte1(byte)0Byte
short2(short)0Short
int40Integer
long80LLong
float40.0fFloat
double80.0dDouble
boolean-falseBoolean
char2\u0000Character

⚠️ 注:boolean在JVM中没有专用指令,通常用int表示(占4字节),数组中以byte存储(1字节)。

🔍 关键区别:基本类型 vs 引用类型

区别点基本类型(如int)封装类(如Integer)
存储位置栈内存堆内存(引用在栈,对象在堆)
默认值0, false, \u0000null
是否可为null不可以可以为null(便于区分未赋值)
使用场景高频计算、性能敏感集合(如List)、泛型、判空逻辑

示例代码:
Integer a = null;
int b = a; // ❌ 报错!NullPointerException(自动拆箱失败)

📌 自动装箱/拆箱:JDK 5引入,允许int <-> Integer自动转换,但要注意空指针风险。

4️⃣ 标识符的命名规则与规范

✅ 含义
标识符是指程序员自定义的名称,用于命名:

  • 类名(Student)
  • 方法名(getName())
  • 变量名(age, score)
  • 接口名(Runnable)
  • 包名(com.example.demo)

✅ 命名规则(硬性要求)

  1. 只能包含:英文字母(a-z, A-Z)、数字(0-9)、下划线_、美元符号$
  2. 不能以数字开头 → 如2student是非法的
  3. 不能是Java关键字或保留字 → 如class、int、goto
  4. 区分大小写 → myVar ≠ MyVar

🚫 典型错误示例:2b(既不道德也不合法 😂)

✅ 命名规范(推荐做法)

类型规范示例
类名、接口名大驼峰法(UpperCamelCase)Student, UserService
方法名、变量名小驼峰法(lowerCamelCase)getAge(), userName
常量名全大写 + 下划线分隔MAX_SIZE, PI_VALUE
包名全小写,反域名命名com.company.project

💡 文件名应与公共类名一致(一个.java文件最多一个public class)

5️⃣ instanceof 关键字详解

📌 基本介绍
instanceof是Java中的一个双目运算符,也叫类型比较运算符,用于判断某个对象是否属于指定类、子类或接口的实例。

语法:
boolean result = obj instanceof Class;

参数说明:

  • obj:一个对象引用(可以是变量、表达式)
  • Class:类名、抽象类名或接口名
  • 返回值:true 或 false

✅ 返回 true 的三种情况

  1. obj 是 Class 的直接实例
  2. obj 是 Class 的子类实例(包括间接继承)
  3. obj 实现了 Class 所表示的接口

✅ 使用示例
Object str = “Hello”;
System.out.println(str instanceof String); // true
System.out.println(str instanceof Object); // true
System.out.println(str instanceof Integer); // false

// 继承关系
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true

// 接口实现
Bird bird = new Bird();
System.out.println(bird instanceof Flyable); // true

⚠️ 注意事项

  • null instanceof X → 永远返回 false(即使X是Object)
  • 编译期检查类型兼容性:若两个类型无继承关系(如String和Integer),编译报错
  • 仅适用于引用类型,不能用于基本数据类型(如42 instanceof int 是语法错误)
  • 泛型擦除限制:无法判断泛型真实类型
    ❌ list instanceof List // 非法
    ✅ list instanceof List // 合法

💡 实际应用场景

  1. 安全向下转型(Downcasting)
    if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.bark();
    }

  2. 处理混合类型集合
    for (Object item : list) {
    if (item instanceof String) {
    String s = (String) item;
    System.out.println("字符串: " + s);
    } else if (item instanceof Number) {
    System.out.println("数字: " + ((Number)item).doubleValue());
    }
    }

  3. 设计模式中的类型判断(策略、工厂)

🆕 Java 14+ 新特性:模式匹配(Pattern Matching for instanceof)

简化代码,避免重复强转:

// 旧写法
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}

// 新写法(Java 14+)
if (obj instanceof String s) {
System.out.println(s.length()); // 直接使用变量s
}

✅ 优势:更简洁、安全、减少冗余代码。

✅ 总结

主题核心要点
Java 特点简单、OOP、跨平台、安全、多线程
OOP vs 过程OOP 易维护,过程高性能
数据类型8种基本类型 + 封装类,注意null与自动装箱
标识符规则要遵守,规范要养成习惯
instanceof类型安全卫士,配合模式匹配更强大

推荐阅读:

  • 《Java核心技术卷I》第3章:Java的基本程序结构
  • Oracle官方文档:Primitive Data Types https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

如果觉得这篇总结对你有帮助,欢迎点赞、收藏、转发!也欢迎在评论区交流更多Java学习心得!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值