1、数据类型

Java 和C++ 一样都是静态类型语言,在变量声明时,需要指定类型。
类型种类也和C++相差不大,有:整数、浮点、字符、布尔等;
详解之前的博客:

https://blog.csdn.net/u010168781/article/details/152096302

注意:
Java 中也有数据类型的隐式转换 和 显示转换(在要转换的值前使用小括号:(类型名)),和 C++ 一样

2、变量

1)var
Java 的局部变量可以使用 var 来声明,类似于 C++ 的 auto,编译器会根据变量的值来推导变量类型;

2)final
Java 使用 final 来限定变量为 常量,类似于 C++ 的 const ,常量在整个程序执行期间只能被赋值一次,不可更改;

3)static
Java 使用 static 来标记变量为静态变量,和 C++ 一样,都是用关键字 static,作用也一样,静态变量在“全局区域”,属于类;

3、运算符

和 C++ 相同的不再,赘述:
1)算术:加+、减-、乘*、除/、取余%、自增++、自减–
2)比较:大于>、小于<、等于==、不等于!=、大于等于>=、小于等于<=
3)逻辑:与&&、或||、非!
4)位:与&、或|、取反~、左移<<、右移>> 、无符号右移>>>

和 C++ 的不同点:>>> 表示无符号右移,即无论最高位是 0 或者 1,右移时,左侧新增的高位都填充0

复合赋值:+= -= …… 和 C++ 类似,多了: >>>=
三元运算:和 C++ 一样,条件式?值1:值2

4、注释

1)单行注释:// 吧啦吧啦吧啦
2)多行注释:/* 吧啦吧啦吧啦 */
3)文档注释:/** 吧啦吧啦吧啦*/
文档注释 在文档的开头,会被 Javadoc 文档工具识别,用来生成代码注释文档

5、流程控制

Java 流程控制 和 C++ 大同小异(else if 是分开写)
1)条件语句 if else:

if(条件1){ 
	执行语句 
} else if(条件2){ 
	执行语句 
} else {
	执行语句
}

2)多分支 switch

switch (表达式){
	case 常量1:
		执行语句
		break
	case 常量2:
		执行语句
		break
	……
	default:
		执行语句
		break
}

3)循环:

while(条件表达式){
	执行语句
}
do {
	执行语句
}while(条件表达式)
for(初始化; 条件表达式; 修改循环条件)
{……}
foreach(元素类型 x: 容器)
{……}

循环控制:break(中断循环)、continue(中断本次循环,继续执行下一次循环)

6、数组

1)一维数组
和 C语言 数组相似,形如:

int arr[];
arr = new int[5]

Java 没有指针,因此没有 int arr* = new int[5] 这样的语句

数组初始化

int arr1[] =  new int[]{1,2,3,4,5};
int arr2[] = {1,2,3,4,5};

使用 for 循环来遍历一维数组

int arr[] =  new int[]{1,2,3,4,5};
for(int i=0; i<12; ++i){
	System.out.println("修改前:" + arr[i]);
    arr[i] = i*5;
    System.out.println("修改后:" + arr[2]);
}

数组操作:

  • 填充:Arrays.fill()
  • 排序:Arrays.sort()
  • 复制:Arrays.copyOf() 、Arrays.copyOfRange()
  • 查询:Arrays.binarySearch()

2)二维数组

int arr2[][]
arr2 = new int [2][3]

7、类

1)类的概念和C++基本相同:

  • 面向对象特点:封装、继承、多态
  • 限制修饰符:private、protected、public,其中protected表示同包内其它类或子类可见
  • 成员变量、成员方法、局部变量、静态变量、静态方法(static)
  • this关键字
  • 类的构造方法(没有返回值、与类名相同)

2)Java中可以给类定义一个主方法

public static void main(String[] args){
}
  • 主方法是静态的,意味着,主方法中调用的其它方法也必须是静态的
  • 主方法没有返回值
  • 主方法参数为字符串数组

3)对象:

  • 使用 new 关键字创建对象;
  • 对象超出作用域、或者将对象置为null时,将自动销毁

4)继承:extends
Java 使用关键字 extends 来实现继承,并且只支持 单继承

class Child extends Parent{}

5)Object
Java 中 所有类的父类是 java.lang.Object,自带的方法如下:

  • getClass():获取Object类定义的方法,不可以重写该方法(final类型)
  • getClass().getName():获取类名
  • equals():比较两个对象的实际内容是否相同;== 是比较两个对象的引用内存地址是否相同
  • clone():克隆对象,需要重写该方法
  • toString():将对象返回为字符串形式,需要重写该方法

6)对象类型转换

  • 子对象 转 父对象,直接赋值即可
  • 父对象 转 子对象,需要强制类型转换

7)instanceof 与 多态
判断一个类是否是另一个类的子类;
可以使用 instanceof 来实现多态

8)方法重载
和 C++ 类似:方法名相同、形参的个数或类型不同

9)final

  • final变量:不可以改变变量的值,用来定义常量;
  • final方法:防止修改父类的定义的方法,禁止重写该方法
  • final类:禁止继承该类

10)record
作用和 class 类似,为了定义 final 类的更简洁、更紧凑的方式;

11)abstract 与 抽象类
和 C++ 中 纯虚类相似,即在父类中定义抽象方法,在子类中实现;
需要使用 abstract 来修饰类 和 方法

public abstract class Parent{
	abstract void test();
}

12)interface 与 接口
所有方法都被定义为抽象方法

public interface Fun{
	void fun1();
	void fun2();
}

13)implements 与 接口实现

public class ChildFun implements Fun{
	@Override
	void fun1(){……}
	@Override
	void fun2(){……}
}

Java 虽然不可以同时继承多个类,但可以同时实现多个接口

public class ChildFun implements 接口1, 接口2 ……{}

注意:接口继承接口需要使用关键字 extends

14)接口的默认方法,允许在接口中实现

  • default 修饰的方法
  • static 修饰的方法

8、包

Java 中 包 是为了解决类名冲突,和 C++ 中的名字空间类似。
1)Java 包的命名规则是全部小写字母
2)包名严格对应文件系统的目录结构,例如:com.com.example 对应文件系统中的 com/example 目录
3)package 定义包:在类中定义包名,必须放在源文件的最开头,前面不能有任何代码(注释除外)
4)import 导入包:

  • import 包名.*: 导入包的所有类
  • import 包名.类名; 导入包的指定类
  • import static 静态成员; 导入静态成员

9、内部类

在类中,再定义类
1)成员内部类

class OuterClass{
	class InnerClass{} 内部类
}

2)匿名内部类:现用现写

new 父类/父接口(){
	子类实现
};
  • 匿名类最后一个大括号后分号
  • 匿名类不能写构造方法
  • 匿名类不能定义静态的成员

10、异常

1)异常处理
和 C++ 异常处理类似

try{
……
}
catch (异常类型){
异常处理
} 
finally{
无论是否有异常,都会执行 finally 语句
}

2)自定义异常

  • 继承 Exception
  • 使用 throw 关键字抛出异常对象

3)throws 和 throw

  • throw:用于主动抛出一个具体的异常对象(手动触发异常),
    语法:throw new 异常类(参数)
  • throws:用于声明方法可能抛出的异常类型(告知调用者该方法有潜在异常)
    语法:方法返回值类型 方法名(参数列表) throws 异常类1, 异常类2… { … }

4)异类分类

  • Throwable : 所有异常的父类
  • Error:严重错误,比如:Java内部错误、资源耗尽
  • Exception:非致命错误,被捕捉后,可以继续运行
  • RuntimeException:运行时异常:这些异常本质上是 “程序员的错误”,应通过修正逻辑避免,而非单纯捕获处理

5)关闭资源

  • 定义关闭资源类,继承自 AutoCloseable接口,在 close方法中释放资源
  • 在try() 小括号中 new 关闭资源类
  • 关闭多个资源时,在 try()小括号中,new多个关闭资源类
try (资源声明1; 资源声明2; ...) {
    // 使用资源的代码
} catch (异常类型 e) {
    // 处理异常
}
  • 相对于 try-finally ,优先使用关闭资源

11、容器

1)基础接口:Collection
Collection 是List、Set等接口的基础接口

  • 添加:add
  • 添加多个:addAll
  • contains:包含
  • remove:删除
  • isEmpty:判断是否为空
  • iterator:迭代器
  • size:容器大小
  • toArray:以数组形式,返回所有元素

2)常用容器

  • ArrayList:可变数组,支持快速随机访问
  • LinkedList:以链表结构保存对消,便于插入、删除元素
  • HashSet:哈希表结构,不保存元素存储顺序
  • TreeSet:递增排序结构
  • HashMap:字典容器,键值Key以哈希结构存储,添加、删除和定位映射时,速度较快
  • TreeMap:字典容器,键值Key以顺序排序存储

3)工具类:Collections

  • 不能通过new创建对象;
  • 使用它的静态方法
  • shuffle:打乱排序
  • addAll:添加多个元素
  • sort:排序
  • binarySearch:二分查找
  • copy:拷贝、复制
  • releaceAll:替换

12、枚举类型

1)Java 的枚举也使用 enum 来定义,例如:

enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

2)常用方法

  • values() 返回枚举常量的数组(按声明顺序)
  • valueOf(String s) 将字符串转换为对应的枚举常量(大小写敏感,不存在则抛异常)
  • ordinal() 返回枚举常量的索引(从 0 开始,不推荐依赖,顺序变则索引变)

13、泛型

Java 的泛型和 C++ 类似,语法如下:

类名<T>

T是泛型的名称,代表泛化的类型

14、lambda 表达式

C#、python、C++都有 lambda 表达式;
Java lambda表达式的语法如下:

(参数列表) -> { 方法体 }

示例

Runnable task = () -> {
    System.out.println("执行任务");
};
// 简化:方法体只有一行,省略 {} 和 ;
Runnable simpleTask = () -> System.out.println("简化的任务");
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐