java的一些语法糖

语法糖:        java编译器将.java文件编译为.class文件时,自动生成和转换一些代码,便于阅读和减轻开发负担


默认构造器:        自动给类加载一个无参构造器

自动拆装箱(jdk5):    基本类型与包装类间有自动转换
            (-128~127)会重用Integer对象

泛型集合取值(jdk5):    在编译泛型时会执行泛型擦除动作,即在编译为字节码时丢失了
            编译时所有类型都是相当于Object类了

        但是在局部变量类型表中(栈帧中),其中包含了方法参数中泛型信息,这些信息没有被擦除
        但是不能通过反射机制获取,只有在方法参数或返回值上才能获取泛型信息
    如:    Method类中有类中getGenericParameterTypes()方法获取参数类型信息
        参数类型信息包含:        原始类型信息(int...)  泛型参数类型(Integer..)
    


可变参数(jdk5):        可变参数 String... args其实是一个String[] 数组
            编译器会根据实际传入参数创建对应长度数组,如果实际无参,就创建空数组


forEach循环(jdk5):    int arr={1,2,3}      //简化数组写法
            实际会被编译为   new int[]{1,2,3};

                    
            对集合的增强for遍历
            实际被编译为iterate迭代器遍历

switch-string(jdk7):    也就是case可以写字符串了
            编译时,将字符串计算hashcode,将他们的哈希码作为case,并且再用equals比较
                先匹配对应hashcode,用byte x=-1来接收,
                即还有第二个switch来用byte来映射hashcode,然后在执行代码

            equals解决hash冲突
            hashcode可以大量的缩减字符串匹配所需的性能

switch-enum:        枚举switch
            会为枚举类生成一个静态内部类,叫合成类
            在其中,定义了一个整数数组,长度和枚举类元素个数相同,其中存case对比数字
            
            编译时对应的是一个switch来,用case 数字来对应枚举元素

枚举类enum(jdk7):        枚举类实例个数有限
            编译时:    会对每一个枚举属性用 static final修饰
                有一个带参构造方法
                一个value方法,可以根据字符串名称来获取枚举实例对象

            枚举类举例:    enum Sex{male,female}
            编译时:        public final class Sex extends Enum<Sex>{
                        public static final Sex male;
                        public static final Sex female;
                        private static final Sex[] &VALUES;
                        static {
                            male=new Sex("male",0);
                            female=new Sex("female",1);
                            $VALUES=new Sex[]{male,female};
                        }//初始化
                        private Sex(String name,int ordinal){
                            super(name,ordinal);
                        }
                        public static Sex[] values(){
                            return $VALUES.clone();
                        }//带参构造方法
                        public static Sex valueOf(String name){
                              return Enum.valueOf(Sex.class,name);
                        }//根据字符串名称来获取枚举实例对象
                    }


try-with-resources(jdk7):    新增了堆需要关闭的资源处理的特殊语法
    
                只要资源对象实现了AutoCloseable接口
                使用try-with-resources可以不用写finally语句块
                编译器会帮助生成关闭资源代码
            
    
方法重写时的桥接模式:        
                方法重写根据返回值分两种情况:
                    父子类返回值一致
                    子类返回值可以是父类返回值的子类
                
                编译时:    会写一个重写方法,其返回值一致,这个方法会调用我们写的方法
                    然后返回我们写的方法的返回值
                    我们的返回是子类对象,向上转型

匿名内部类:        编译时:    生成额外类,    类名是当前类名+$+数字
                实现了对应接口以及方法,对应代码不变,就是完整的一个内部类
                
                如果将外部参数传入匿名内部类,那么要求该参数必须是final的
                原因:    如果外部参数变了,匿名内部类中是无法跟着改变的
                
                    
                
                


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值