java基础疑点分析

来源:互联网 发布:淘宝排名优化怎么做 编辑:程序博客网 时间:2024/06/10 20:55

         本篇主要对java基础一些原理性概念以及特性进行讲解,希望大神能够多多指教,提出其中的错误;

                   同时可能有些问题没有注意到,也希望大家能够提醒

        (1)类型自动转换和类型强制转换

               (包括基本数据类型的转换和引用类型的转换)
               问:基本数据类型自动转换执行原因以及如何实现类型转换
               基本数据类型自动转换执行原因:
                       <1>基本数据类型间运算导致数据类型向上转型
                       <2>整型数据默认int类型,浮点型数据默认double类型
               基本数据类型间转换原理:
                       不同数据类型在内存中有相应内存空间,根据向上补全以及向下截取
                        对内存空间的更改实现数据类型之间转换
                引用数据类型间强制转换:
                    eg:Father s = new Son();
                    以上例子执行动作包括三步:
                        在堆中的对象池中创建Son对象内存空间;
                        在堆中的句柄池中创建名字为s的Father对象引用
                        将Son对象内存空间地址复制到s对象引用内
                    eg:Son son = (Son)s;
                    以上动作包括两步:
                        根据s的继承抽象树判断类型是否匹配,不匹配则抛出ClassCastException
                        创建类型为Son的son对象引用并将s引用复制给son引用

          (2)数据缓存机制
                 Integer缓存机制
:
                           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 =
                                              sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
                                         if (integerCacheHighPropValue != null) {
                                                    try {
                                                       int i = parseInt(integerCacheHighPropValue);
                                                       i = Math.max(i, 127);
                                                       // Maximum array size is Integer.MAX_VALUE
                                                        h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                                                     } catch( NumberFormatException nfe) {
                                                      // If the property cannot be parsed into an int, ignore it.
                                           }
                                     }
                                      high = h;

                                      cache = new Integer[(high - low) + 1];
                                      int j = low;
                                      for(int k = 0; k < cache.length; k++)
                                          cache[k] = new Integer(j++);

                                       // range [-128, 127] must be interned (JLS7 5.1.7)
                                        assert IntegerCache.high >= 127;
                                    }

                                     private IntegerCache() {}
                             }
                              类似地,基本数据类型通过内部类的方式将-128~127内数据进行缓存操作,
                              目的是减少创建对象的内存消耗,提高性能;
                              注意的是缓存机制并不是不创建对象,而是同一数值只创建一次对象


              (3)自动装箱和拆箱机制
                       概念:在方法调用和赋值等操作中实现基本数据类型和包装类型间的转换
                       目的:集合的操作是基于对象的;同时能够提高代码整洁性

               (4)java各版本新特性
                           转载:http://www.importnew.com/844.html

                           1. JDK Version1.1
                                <1>引入jdbc
                                <2>支持内部类
                                <3>引入javabean
                                <4>引入RMI
                                <5>引入反射
                          2. J2SE Version 1.2
                                <1>引入集合框架
                                <2>对字符串常量做内存映射
                                <3>引入JIT编译器
                                <4>引入对打包java文件进行数字签名
                                <5>引入控制授权访问系统资源的策略工具
                                <6>引入JFC,包括Swing1.0,拖放和java2D类库
                                <7>引入java插件
                                <8>在jdbc引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
                                <9>在applet添加声音支持
                          3. J2SE Version 1.3
                                <1>引入Java Sound API
                                <2>jar文件索引
                                <3>对Java的各个方面都做了大量优化和增强
                          4. J2SE Version 1.4
                                <1>XML处理;
                                <2>Java打印服务;
                                <3>引入Logging API;
                                <4>引入Java Web Start;
                                <5>引入JDBC 3.0 API;
                                <6>引入断言;
                                <7>引入Preferences API;
                                <8>引入链式异常处理;
                                <9>支持IPv6;
                                <10>支持正则表达式;
                                <11>引入Image I/O slot machine API
                          5. J2SE Version 5
                                <1>引入泛型
                                <2>增强循环,可以使用迭代方式
                                <3>自动装箱与自动拆箱
                                <4>类型安全的枚举
                                <5>可变参数
                                <6>静态引入
                                <7>元数据(注解)
                                <8>引入Instrumentation
                           6. J2SE Version 6
                                 <1>支持脚本语言
                                 <2>引入JDBC 4.0 API
                                 <3>引入Java Compiler API
                                 <4>可插拔注解
                                 <5>增加对Native PKI、Java GSS、Kerberos和LDAP的支持
                                 <6>继承Web Services
                            7. J2SE Version 7
                                 <1>switch语句块中允许以字符串作为分支条件
                                 <2>在创建泛型对象时应用类型推断
                                 <3>在一个语句块中捕获多种异常
                                 <4>支持动态语言
                                 <5>支持try-with-resources
                                 <6>引入Java NIO.2开发包
                                 <7>数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线
                                 <8>钻石型语法
                                 <9>null值的自动处理

                             8. J2SE Version 8
                                  参考http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
                                 <1>函数式接口
                                 <2>Lambda表达式
                                 <3>对接口的增强,包括默认方法和静态方法
                                 <4>集合流式操作,实现对集合的并行处理和函数式操作
                                 <5>扩展注解的使用范围
                                 <6>增加安全性,包括支持更强的基于密码的基于AES加密算法
                                 <7>改进了IO/NIO实现
                                 <8>完善全球化功能,支持新增的unicode标准,新增日历和本地化的API
0 0