JAVA基础

基本数据类型:
byte/8
char/16
short/16
int/32
float/32
long/64
double/64
boolean/~
JVM会在编译时,将boolean类型转化为相应的int。支持boolean数组

包装类型:
基本类型都有对应的包装类型,基本类型与其包装类型之间的赋值使用自动的装箱与拆箱完成

缓存池:
java中对于每一个基本数据类型都会创建一个缓存池,缓存池中存储了许多基本类型的对象。一定情况下将会返回这些对象。
在使用这些基本类型对应的包装类型时,如果数值范围在缓存池的范围内,就可以直接引用缓存池中的对象。(这会造成有时在比较是“异常”相等的情况)
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k); // true

先说“==”比较,当比较的是引用对象时,比较的是两个对象的内存地址,如果比较的是基本数据类型的时候,比较的是具体的值

最后的结果为true,意味着z和k的内存地址是相等的。实际上编译器自动执行了装箱操作,操作的过程中执行了valueOf()方法。123在缓存池范围内,所以就会引用相同的对象。
public static Integer valueOf(int i) {
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

基本类型对应的缓冲池如下:
● boolean values true and false
● all byte values
● short values between -128 and 127
● int values between -128 and 127
● char in the range \u0000 to \u007F

String
java8中,String内部使用char数组存储数据
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/** The value is used for character storage. /
private final char value[];
}
java9后,String 类的实现改用 byte 数组存储字符串,同时使用 coder 来标识使用了哪种编码。
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/
* The value is used for character storage. */
private final byte[] value;

/** The identifier of the encoding used to encode the bytes in {@code value}. */
private final byte coder;

}
这里的value是final的,意味着string是不可变的
区别于StringBuffer and StringBuilder,这两个是可变的
但是,string是线程安全的。Stringbuilder不是线程安全的,StringBuffer是线程安全的,内部使用synchronized进行同步

由于string是不可变的,所以可以使用string pool
字符串常量池,保存着所有的字符串字面量,这些字面量在编译时就确定。也可以使用intern()方法将字符串添加到String Pool中
在java 7中,string pool被移动到堆中。

运算
java不能进行隐式的类型转换,比如1是int类型,不能向下转型为short
但是使用+=或者是++会执行隐式的类型转换

关键字
final
private被隐式的指定为final

static
静态语句块:
静态语句块在类被初始化时运行一次

Object通用方法
equals()
基本类型没有equals方法
引用类型,equals检查引用的对象是否等价,==检查是否是同一个对象

hashCode()
HashSet以及HashMap等集合类使用了hashCode()方法计算对象应该存储的位置
31

clone()
这种方法既有风险又复杂
推荐使用拷贝构造函数或者是拷贝工厂来拷贝一个对象

接口:
接口在java8之前,是完全抽象的
从java8开始,接口允许由于拥有默认的方法实现
java9开始,允许方法定义为private

反射
每一个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。
类加载相当于 Class 对象的加载,类在第一次使用时才动态加载到 JVM 中。也可以使用 Class.forName(“com.mysql.jdbc.Driver”) 这种方式来控制类的加载,该方法会返回一个 Class 对象。
反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加载进来。

异常:
Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:
● 受检异常 :需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复;
● 非受检异常 :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序崩溃并且无法恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值