JavaSE笔记

这篇博客详细介绍了JavaSE的基础和高级部分,包括数据类型、变量、运算符、循环、数组、面向对象、多线程等内容。重点讲解了变量的分类、运算符的使用、异常处理、面向对象的封装、继承和多态,以及多线程基础知识。
摘要由CSDN通过智能技术生成

JavaSE

JavaSE技术范围

JavaSE范围包括Java基础和Java高级部分

基础部分:数据类型、变量、运算符、循环结构、数组、面向对象(以封装、继承和多态展开来讲)

高级部分:多线程基础、常用类于API、枚举类、注解、反射、泛型、IO基础、JVM虚拟机基础

基础部分

数据类型

数据类型分为:基本类型引用类型

基本数据类型很好理解,即8种基本数据类型:byte、short、int、long、float、double、char、float

默认值是依据作为成员变量时,如果不显示初始化时,在类对象实例化过程中,被填充的默认值

类型 空间 默认值
byte 1字节 0
short 2字节 0
int 4字节 0
long 8字节 0L
float 4字节 0.0f
double 8字节 0.0d
char 2字节 ‘\u0000’
boolean 1字节 false

引用类型也很好理解,即:类、接口和数组

在平常的代码书写时,外面用到的直接量即字面量,整数字面量整型(int)和小数字面量双精度浮点型(double)

关于char
/**
 * 1.char 占用2个byte空间即 16bit
 * 2.char 可以与int进行转换,毕竟int类型的范围包含char
 * 3.char 的特殊字符转义字符
 * 换行符 \n\r (windows下)
 * 制表符 \t
 * 4.可以用Unicode来进行char表示 Unicode是16进制表示 '\u0020'
 */

变量

变量分类

变量分为静态变量、成员变量和局部变量

静态变量:一般在类加载过程时,静态变量(static)被放入方法区内

成员变量:一般指实例变量,类的实例变量,对象拥有的

局部变量:指的是方法内声明的变量(基本类型、引用类型),一旦方法结束后,所占空间将被GC回收

局部变量的说明

什么是局部变量:局部变量就是在方法体或代码块中声明的变量,方法执行完或代码块执行完,该变量就会被弹出栈。实际上,局部变量是保存在栈中(虚拟机栈),局部变量表。特别注意的是,形式参数也是局部变量,随方法结束一起消亡

成员变量的说明

成员变量如果没有初始化,有其默认值:基本类型为其本身的默认值,引用类型的默认值为null

变量提升

变量提升即,在byte、short、char基本类型作运算的时候,会自动被提升为int类型的变量计算,得到的结果类型仍然为int

byte byte1 = 1;
short short1 = 2;
char c1 = '好';
// byte short char类型会自动提升为int类型进行计算
int result = byte1 + short + c1 ;
隐式转换

在变量赋值的时候,如果“=”左右两边是不同的基本数据类型,小的范围自动被隐式转换为大范围

// 左边范围大,隐式转换
long l1 = 1234; // int 转 long,隐式转换
// 这里用到了缓存机制,127在-128~127内,虽然说字面量式int,但是范围在缓存内,也可以式转换
byte byte = 127; 
缓存机制

Java底层提供了数值类型的缓存机制,对Byte、Short、Integer、Long这四种包装类进行了数值的缓存

缓存何时生效?通过调用包装类的valueOf()方法时,会用缓存,以Byte为例

public final class Byte extends Number implements Comparable<Byte> {
   
    // 略
    private static class ByteCache {
   
        private ByteCache(){
   }

        static final Byte cache[] = new Byte[-(-128) + 127 + 1];

        static {
   
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Byte((byte)(i - 128));
        }
    }
    
    // 这里用到了缓存
    @HotSpotIntrinsicCandidate
    public static Byte valueOf(byte b) {
   
        final int offset = 128;
        return ByteCache.cache[(int)b + offset];
    }    
}

Integer的缓存有些特殊,它可以通过JVM启动参数来设置

private static class IntegerCache {
   
    static final int low = -128;
    static final int high;
    static final Integer cache[];
    static {
   
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
   
            try {
   
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值