【Java】从入门到放弃-04:基本语法
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("简化的任务");
更多推荐
所有评论(0)