JAVA SE 杂论

概念:
    1.构造函数    //方法与类名相同,无返回值
        class Demo{
            public Demo(){
            }
        }
        在 new 此类对象时,执行构造函数
    2.构造函数块    //无方法名,返回值,先于构造函数运行
        又称代码块,每次new 运行一次
        class Demo{
            public{
            }
        }
        class Demo{
            {}
        }
    3.重载    //方法与类名相同,无返回值,参数不同的方法
        class Demo{
            public Demo(){
            }
            public Demo(int i){
            }
            public Demo(String str){
            }
        }
    4.递归        //函数自己调用自己
    5.外部类名.内部类名 名字 = new 外部类名().new 内部类名);        //其他类引用内部类名时
    6.哈希值        //内存地址
    7.哈希表
        //存放内存地址的表,以地址的值为顺序,当存放地相同但对象不同时,在此地址下开一空间存放相同地的对象
    8.静态     //会在上一级运行时直接在物理内存中使用一个位置
        8.1.静态代码块,在虚拟机运行时就会加载,而且只会加一次
            class Demo{
                static{
                }
            }
        8.2.静态方法
            在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。
            而实例方法只有"对象名.方法名"。也就是说,调用静态方法可以无需创建对象。
            静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),
            而不允许访问实例成员变量和实例方法;实例方法则无此限制。
            public static void demo{}
    9.没有提供构造方法
        9.1.说明不能 new 对象,能想到该类中方法都是静态的
        9.2.发现该类中还有非静态方法
        9.3.说明该类肯定会提供方法获取本类对象,而且该方法是静态的,并返回类型是本类型
    10字段
        类名.方法         //字段的使用
        字段内的方法都为静态
    11.文件
        无法访问隐藏文件
        删除时直接删除,不经过回收站
    12.反射
        通过一个类名来探察这个类里面的信息,
            比如说类的属性名,属性名的修饰符,方法名,方法返回值,方法修饰符等等,
            反正除了方法体得不到,其他都可以用反射得到;
            反射还可以生成类的实例,通过这个实例定义属性,调用方法,
            特别是能调用私有的属性和私有的方法。

符号
    1.(a==b)?a:b; 等同于 if(a==b){a}else{b}
    2.&&    //与
    3.||    //或
    4.!    //非
    5.>>    //将数字转为二进制右移?位
            不带符号
            int的宽度为32位
            8:
            0000 0000 0000 0000 0000 0000 0000 1000
            8>>1
            0000 0000 0000 0000 0000 0000 0000 0100 十进制为4
            i >> n :     i / (2^n)
        >>>    //将数字转为二进制右移?位
            带符号右移
            -7:
            1111 1111 1111 1111 1111 1111 1111 1001
            -7>>>1:
            0111 1111 1111 1111 1111 1111 1111 1100 十进制为214748364
    6.<<    //将数字转为二进制左移
            i<<n:   i * (2^n)
        <<<    //带符号左移

描述
    abstract      //抽象   //无具体描述
    static         //静态   //函数一运行就存在于内存中
    instanceof     //判断类型      if(i instanceof int) //i类型是否为int
    implements      //实现,连接接口,(某函数实现接口)
    interface    //接口,描述类,里面方法全是抽象,开放。变量全是开放,静态,常量
    protected    //访问范围是子类
    private        //只能是本类
    public        //可以是子类,同一个包中都可以访问。

泛型
        //JDK1.5版本以后出现新特性,用于解决安全问题,是一个安全机制
        在集合中比较常见
        ArryList<String> al = new ArrayList<String>();
    1.<类型>    //指定输入元素类型
        <String>    //指定输入元素String类型
        <?>    //不明确具体类型,占位符与<T>效果类似
    2.好处
        将运行时期出现的问题ClassCastException,转移到编译时期,方便与程序员解决问题
        避免强制转换麻烦
    3.泛型类
        什么时候定义泛型类?
        当类中要操作的引用数据类型不确定的时候,由引用方来定义类型
        早期定义的Object来完成扩展
        现在定义泛型类来完成扩展
        class Utiles<QQ>{        //QQ为自定义泛型
            private QQ q;        
            public void setObject(QQ q){
                this.q = q;
            }
            public QQ getObject(){
                return q;
            }
        }
        Utils<Student> stu = new Utils<Student>();    //自定义学生类型
            但明确类型后下面方法只能是这个类型,否则只能在新建一个类
    4.泛型方法
            自由度比泛型方法高
            class Demo{
                public <T> void show(T t){
                }
                public <Q> void print(Q q){
                }
            }
            Demo d = new Demo();
            d.show("haha");
            d.show(new Integer(4));
            d.print("Heihei");
        静态方法泛型
            静态方法泛型不可以访问类上定义的泛型
            如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上
            class Demo<T>{
                public static <w> void show(T t){
                }
            }
    5.泛型的限定
        ? 通配符,也可以理解为占位符
        ? extends E: 可以接收E类型或者E的子类型,上限
        ? super E: 可以接收E类型或者E的父类型,下限
        
        public static void printColl(ArrayList<? extends E> all){}
        public static void printColl(ArrayList<? super E> all){}

 


异常
    java.lang.Throwable
            java.lang.Object
              java.lang.Throwable
            异常所在类,包
        Exception    //异常
            RuntimeException    //执行异常
                ClassCastExcepion    //类型转换异常
            CheckedException    //检查异常
                除了runtimeException以外的异常,
            IOException         //I/O 异常
                FileNotFoundException
            方法
                printStackTrace        //输出异常信息
                    try{}
                    catch( Exception e ){
                        e.printStackTrace(System.out)}       //在控制台输出错误信息
                        e.printStackTrace(new printStream("demo.txt"));} //将错误信息传入demo.txt文件内  
    将编译时异常转为运行时异常
        throw new RuntimeException(e)
    处理异常
        try{}
            catch( Exception e ){}
    抛出异常
        throw new RuntimeException("***")        //抛异常

 

特殊
    ...      //可变参数
        public void demo(int... arr){       //使用方式,int 可以为任意类型
            System.out.println(arr.length);        //返回数组长度
        }        
        例如:
        demo(1,2,3,4);     demo();
        demo(12345,123,42,13);  //可以传入任意长度的 int 类型值
        不可以:      public void demo(int... arr, String str){}   //error
        可以:        public void demo(String str, int... arr){}

测试
    junit
        @Before 在方法上添加,每次运行@Test 先运行@Before
        @BeforeClass 在方法上添加,每次运行Junit 先运行@BeforeClass
        @Test 在方法上添加,成为测试方法
        @After 在方法上添加,每次运行@Test 后运行@After
        @AfterClass 在方法上添加,每次运行 junit 后运行@AfterClass

你可能感兴趣的:(Java se)