Java核心语法|数据类型和运算符、方法、数组、String、异常

数据类型与运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZVS4slo-1596728839243)(C:\Users\周澜\AppData\Roaming\Typora\typora-user-images\image-20200406143917418.png)]

1.变量与类型
1.1类型概览
  1. short:占2个字节。数据范围-32768~32767

  2. int:占4个字节,和操作系统没有直接关系。数据范围:-231~231-1,即-21亿~21亿

  3. long:占8个字节。数据范围:-263~263-1

  4. double:占8个字节

  5. float:占4个字节

    注:浮点数在内存中的存储

  6. char:Java使用Unicode表示字符,一个字符占2个字节

  7. byte:占1个字节。数据范围:-128~127

  8. boolean:与int类型不能相互转换

  9. String

    注:\n、\t

1.2类型转换

Java是强类型编程语言

表示范围更小的类型能隐式转换为范围更大的类型,反之不行,需要强制类型转换。互不相干的类型不能强转

1.3类型提升

不同类型的数据混合运算,范围小的会提升成范围大的。

对于short、byte这种类型,计算时会提升成4个字节的int,再运算。

2.运算符
2.1算数运算符

% 也能对 double求模

2.2关系运算符
2.3逻辑运算符
  1. 短路求值

    &&:若左侧为flase,则不计算右侧表达式

    ||:若左侧为true,则不计算右侧表达式

  2. & | :若两侧操作数为boolean时,表示逻辑运算符,但不支持短路求值

    若两侧操作数为整数类型时,表示位运算符

2.4位运算符

按照二进制位运算

2.5移位运算符
  1. 左移<<:最右补0
  2. 右移>>:最左补符号位
  3. 无符号右移>>>:最左补0
2.6三目运算符

方法

方法
重载overload

体现形式:方法名字相同,参数基本类型不同或参数个数不同(两个都不同也行)。(返回值类型不考虑)

注:当方法名和参数相同时, 返回值类型不同时,不构成重载

递归

数组

基本用法
创建
//动态初始化
数据类型[] 数组名 = new 数据类型 [长度] {初始化数据};
//静态初始化
数据类型[] 数组名 = {初始化数据};
数组作为方法的参数、返回值
数组的使用

数组的拷贝:1.System.arrayCopy

2.clone

3.Array.copyOf:深拷贝

二维数组

String

字符串的创建
//法一:直接赋值
String str1 = "Hello World";
//法二:构造方法
String str2 = new String("Hello Bit");
//法三:
char[] arr = {'a','b','c'};
String str3 = new String(arr);

法一中,字符串内容即"Hello World"存在字符串常量池中,只需要存一份。

下次若使用直接赋值的方式声明String对象,先在池中寻找,若存在,则直接应用,否则开辟新的字符串对象并放入池中。

法二的内存布局

每使用一次构造方法都会开辟一块内存空间,可以使用intern() 自动入池。

字符串的比较

==:针对引用类型,比较的是对象的身份

equals:比较字符串的内容

字符串不可变
+=
好处
  1. 方便实现字符串对象池
  2. 不可变对象是线程安全的
  3. 不可变对象方便缓存hash code
字符串改变
  1. 创建新的字符串
  2. 反射
StringBuffer和StringBuilder

可以用来修改字符串

StringBuffer采用同步处理,是线程安全的,StringBuilder是线程不安全的

异常

异常的背景

异常的核心是EAFP,先操作,遇到问题才处理。正常流程和错误代码是分开的,更容易理解代码。

异常的用法
1.捕获异常
try{
//有可能出现异常的语句
} catch {
//出现异常后的处理行为
} finally {
//处理善后工作
}

注:1.可使用try回收资源。如在try()内创建Scanner

2.如果finally也存在return语句,会执行finally中的renturn语句

流程:

1.程序执行try中的代码

2.遇到异常,结束try中的代码,查看catch中的异常类型是否匹配,若匹配则进行catch中的代码,否则将异常传递给上一层

3.执行finally中的代码

4.异常层层上传,若传到main中也没有处理,就会有JVM处理,程序异常终止

2.方法体内抛出异常
if(y == 0) {
	throw new ArithmeticException("抛出0异常");
}
3.方法头声明异常
public int divide(int x, int y) throws ArithmeticException {

}
4.自定义异常

自定义异常会继承自Exception或者RuntimeException

异常体系

  1. Throwable派生出两个子类,Error和Exception
  2. Error指Java运行时内部错误和资源耗尽错误
  3. Exception是常用的异常类的父类
  4. Exception派生出许多的异常类,可分为受查异常和非受查异常(RuntimeException),受查异常需要显示处理

泛型

机制
  1. 增加编译期间的类型检查
  2. 取消类型转换的使用
使用
ArrayList<Integer> list = new ArratList<>();
总结

泛型是为了解决某些容器、算法等代码的通用性引入,并且在编译期间做检查

泛型利用的是 Object 是所有类的祖先类、且父类引用指向子类对象的特点工作

包装类

装箱:基本类型 -> 包装类

拆箱:包装类 -> 基本类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值