java基础—2

1. private,protected,public

父类public,子类private,正在尝试分配更低的访问权限

为什么?因为这不符合原则,这样如果允许,就不能多肽了。

设计模式来说,接口开放,实现可以混淆。

2. 接口和抽象类

有区别吗?没有

JVM的角度来看,这2个东西,在JVM里面,都是标记为abstruct的类。所以接口可以理解为是一种特殊的类。并且在java8开始,接口也可以有默认实现。

这是从JVM的角度来看,从设计的角度来看呢?

https://developer.ibm.com/zh/articles/l-javainterface-abstract/

可以参考上面的链接。

抽象类,是is a的关系。接口是like a的关系。

3. 反射

反射是虚拟机特有的一个case,C++是不支持这个的。

当类加载了以后,它的所有信息都在虚拟机里保存了,所以可以通过classloader的方式,找到类的全部信息,包括private的信息,但是这个方式其实是不推荐的,一个是效率低,二是这样不符合设计原则。

4. 异常

  • Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常

5.泛型

5.1 泛型的本质

把类型当作型参来处理,本质上就是参数化类型。

5.2 虚拟机上的实现

C++上的实现是每个基本类,都复制一份代码,这个是很老的设计了。JVM的实现更彻底,就是用Object来代表,是有一份实现。所以类型就会丢失掉。然后在使用的时候,编译器会优化这部分代码,进行强制转换。

5.3 类型搽除

@Override
    public void testA() {
        List a = new ArrayList<Integer>();
        this.method(a);
    }

    public static String method(List<String> list){
        return list.get(0);
    }

Integer 传给了String,对的,是这个case。

因为啥?List a 是这个什么类型,就是List类型。在方法传递的时候,method只知道传递进去list类型。

所以这部分code在list.get(0)的时候,会变为如下代码

return (String)list.get(0);

所以可以编译通过,but,在运行的时候会抛异常,类型不符。

6. 注解

  • 生成文档。这是最常见的,也是java 最早提供的注解。常用的有@param @return 等
  • 跟踪代码依赖性,实现替代配置文件功能。比如Dagger 2 依赖注入,未来java 开发,将大量注解配置,具有很大用处;
  • 在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出

    注解的主要方式,就是通过反射的方式,然后获取

    f(field.isAnnotationPresent(FruitName.class)){
                FruitName fruitName = field.getAnnotation(FruitName.class);
                TraceLog.i(fruitName.value());
            }

    这样就是annotation的方式。

7. Java & C++ 区别

  • java是跨平台的,C++是平台相关的(linuxwindows,mac等)

    java是通过JVM来解决跨平台的问题。
  • java是纯面向对象,而C++是C语言版本的面向对象
  • java没有指针,而C++有
  • java有GC,C++需要自己管理
  • java不支持多继承,c++支持
  • java不支持操作符重载,而C++支持

原文 

http://www.demanmath.com/index.php/2020/07/16/javajichu-2/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java基础—2

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址