Blog阅读,面向对象基础

package pack;

import java.util.Arrays;

import static java.lang.System.out;

public class Ans {
    public static void main(String[] args) {
        test1();
        test2();
        test5();
        test10();
    }

    static void test1() {
        func1(null);                     //这里直接是一个null
        func1((Integer) null);                   //这里是含有一个null的数组
        func1();                                 //空数组
    }
    static void func1(Integer...arg) {          //对于可变参数的补充
        System.out.println(Arrays.toString(arg));
    }

    static void test2() {                       //instanceof 相关
        class A {}
        class B extends A {void x() {}}
        A a = new A();
        A b = new B();
        B n = null;
        System.out.println(a instanceof B);
        System.out.println(b instanceof B);
        System.out.println(n instanceof B);             //前两个没啥说的,这里说明null instanceof..不论如何都是false

        A b2 = new B();
        if (b2 instanceof B)
            //! b2.x();                                 //这是java SE14的一个新特性,instanceof B为true 后直接将b2转为B,但目前14还没有上线,预计在3月份
            //使用instanceof variable这种判断并转型为指定类型变量的语法时,必须打开编译器开关--source 14和--enable-preview。
            ((B) b2).x();
    }

    static void test3() {
        //这一节没有代码,要注意几个事情:java中final修饰的方法不能被重写,但是可以被继承,final方法要快于非final方法,因为在编译时已经静态绑定
        //第二,java中const和goto一样是预留关键字,以后可能会用上
        //第三,一个个人理解,多态这个东西其实是为其上层提供了一个接口,这样上层使用时可以不管底层实现细节而直接使用接口
    }

    static void test4() {
        //同样没有代码,主要给出面向抽象的定义
        //使用抽象类规定功能,我认为这样做可以使功能与实现完全分离,我们甚至不需要一个具体的类就可以定义所有功能,这与接口非常相似
    }

    public interface A {
        default void a() {System.out.println("aaa");}
        static void b() {System.out.println("bbb");}
    }
    static void test5() {
        //接口比抽象类更为抽象,其持有的属性默认为static public的

        //我们发现不能在方法中定义接口,这一点与class不同
        //在java SE8引入了interface 中的default和static方法,默认为public,不可为private与protected(是不是意味着就是public了,怎么显示的改变为包权限??)
        //default为可以不重写的方法,当然实现接口的类也可以重写此方法
        class B implements A {}
        A b = new B();
        b.a();
        //! b.b();          //static 方法不能由实例调用,只能由接口名调用
        A.b();
    }

    static void test6() {
        //在使用静态方法或静态属性时最好不要使用[变量名.静态名],因为变量不持有静态信息,我们能够这样使用是因为在调用时编译器将[变量名.静态名]转换为[类名.静态名],所以建议直接使用[类名.静态名]
    }

    static void test7() {
        //我们不推荐使用import *这种做法,因为当引入很多这样的包时,会很难辨别一个类属于哪个包
        //java SE5 引入import static 这种做法
        out.println("import static");       //我们在代码的最开头使用了import java.util.Arrays

        //当使用一个class名称时,编译器的动作:
        //如果是完整类名,就直接根据完整类名查找这个class;
        //如果是简单类名,按下面的顺序依次查找:
        //  查找当前package是否存在这个class;
        //  查找import的包是否包含这个class;
        //  查找java.lang包是否包含这个class。

        //编写代码时编译器会帮助我们:
        // 默认自动import当前package的其他class;
        //默认自动import java.lang.*。
    }

    static void test8() {
        //我们认为应当把public方法写在最前面,因为它们是用户使用的接口,用户应当最先了解它们

        //如果不确定是否需要public,就不声明为public,即尽可能少地暴露对外的字段和方法。(保证封装性)
        //把方法定义为package权限有助于测试,因为测试类和被测试类只要位于同一个package,测试代码就可以访问被测试类的package权限方法。
    }

    static void test9() {
        //有关jar:https://www.liaoxuefeng.com/wiki/1252599548343744/1260466914339296
    }

    static void test10() {
        //java SE9 添加了特性module,为了将没有引入相关jar的运行时classCastException提前到编译时,同时增加了代码的封装性
        //如果出现kotlin error可以rebuild解决
        //详情请见:https://www.liaoxuefeng.com/wiki/1252599548343744/1281795926523938
        //关于打包jar请见:https://blog.csdn.net/dominic_z/article/details/82791790
        //相关其他包的代码会贴在底下
        module.Test t = new module.Test();
        t.a();                      //我们在module-info.java中requires了ModuleTest,在ModuleTest的module-info.java exports了module包,所以可以调用
    }
}

blog_test.module-info.java:

module blog.test {
    requires ModuleTest;
}

ModuleTest:

package module;

public class Test {
    public static void main(String[] args) {

    }
    public void a() {System.out.println("Module!!!!!");}
}

ModuleTest.module-info.java

module ModuleTest {
    exports module;
}

总之收获很大!!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值