美文网首页
java基础0

java基础0

作者: 一只小星_ | 来源:发表于2019-03-03 23:16 被阅读0次

    23.java类加载的过程

    类的加载是把 .class字节码文件实例化成Class对象并进行相关初始化的操作。类加载有加载、链接(验证、准备、解析)和初始化三个阶段。加载的工作:通过类的全限定名获取类定义类的二进制字节流,把二进制字节流代表的静态存储结构转化为方法区的运行时数据结构,在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。链接中的验证是检查Class文件的字节流包含的信息是不是满足虚拟机的要求,准备阶段会给类变量分配空间设置初始值,这里说的初始值一般是0值,比如:

    public static int value=123;准备阶段过后value的值是0,但如果是public static final int value=123,准备阶段过后value就是123。解析阶段会把常量池里符号引用替换成直接引用。

    初始化就是执行类构造器方法的过程。

    24.什么时候会触发类加载过程中的第一个阶段:加载?jvm对这个没有严格的要求,不同的虚拟机实现可以不同。

    25.什么时候触发类的初始化,jvm严格规定了有且仅有5种情况必须执行对类的初始化(加载、链接都要在这之前完成):1.遇到new、读取或设置一个类的静态字段的时候(final修饰的在编译时期就把结果放入常量池的静态字段除外),和调用类的变量或者静态方法的时候。2,对类进行反射调用的时候。3,当初始化一个类发现父类还没有初始化过,则对父类进行初始化。4,当虚拟机启动时,需要执行包含main()的主类的时候,会先初始化这个主类。5,用MethodHandle。

    以上情况就是对类进行了主动引用,

    26.序列化

    内存中的数据只有转换为二进制流才可以进行数据持久化和网络传输。

    把数据对象转换为二进制流的过程称为对象序列化,把二进制流恢复成数据对象的过程称为反序列化。序列化常见的使用场景是rpc数据传输。

    27.servivor区为什么有两个

    有两个可以保证每次复制完的后,没有碎片化

    常见的序列化方式:1.java原声序列化,2,Hessian序列化,3,JSON序列化

    1.面向对象和面向过程的区别对比:

    面向对象易维护、易扩展、易复用,由于面向对象继承、封装、多态的特性,可以设计低耦合的系统易于维护,但因为类的实例化开销较大,所以面向过程性能更高,一般性能是最主要的因素时采用面向过程开发,它没有面向对象那么易维护易扩展易复用。

    2.java语言的特点

    跨平台、面向对象,支持多线程、支持网络编程。

    3.JVM,JDK,JRE都是什么

    jvm是运行java字节码的虚拟机,对不同的系统又不同的实现,让相同的代码在不同的机器上都能出一样的结果。

    JRE是java的运行环境,它是运行已编译 Java 程序所需的所有内容的集合,包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。

    JDK是Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。

    4.什么是java字节码

    jvm可以理解的代码就是字节码,(就是扩展名是.class文件),它不需要任何特定的处理器,只面向虚拟机。jvm和字节码实现一次编译随处运行。

    5.从java代码到运行起来又哪些步骤?

    java源代码通过jdk中的编译器编译生成jvm理解的lava字节码,然后jvm可以运行字节码。

    6.java和c++区别是什么?

    都是面向对象语言,都支持封装、继承和多态。c++可以操作指针,Java 不提供指针来直接访问内存。Java 的类是单继承的,C++ 支持多重继承;java的接口可以多继承。Java 有自动内存管理机制,不需要程序员手动释放无用内存。

    7.构造器是否可以被重写?

    构造器不可以,在继承的时候,子类也无法获得父类的构造器和私有的属性。一般要用父类的构造器都是用super,加载顺序?先加载父类吧,那super什么时候执行?

    8.说说面向对象

    面向对象有封装、多态继承三个特征。

    封装是属性私有化,对外提供访问的方法,继承可以通过继承父类实现方法的复用,多态是声明父类指向子类的实例。

    9.String,StringBuffer,StringBuilder的区别,为什么String不可变

    1.String是不可变的,StringBuffer,StringBuilder可变

    2.线程安全上的差别,String因为不可变是线程安全的的,StringBuffer加了同步锁也是线程安全的,StringBuilder线程不安全。

    使用上的选择:如果字符串不会更改,使用String类。如果字符串可以更改并且只能从单个线程访问,则使用a StringBuilder就足够了。如果字符串可以更改,并且将从多个线程访问,请使用StringBuffer。

    10.java中定义一个不做事且没有参数的构造方法是干什么的?

    java程序在执行子类的构造方法的时候,如果没有一个super明确调用一个父类的构造方法,就会调用父类无参数的构造方法,为了防止子类不写super发生编译错误,就加上一个没有参数的构造方法。

    11.类可不可以不写构造方法?

    如果类一个构造方法都没写,那默认会给它一个无参的。

    12.接口和抽象类的区别:

      从设计层面上看,抽象类提供了一种 IS-A 关系,子类对象必须能够替换掉所有父类对象(里氏替换)。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。

    从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。抽象类一般会包含抽象方法,抽象方法一定位于抽象类中。

    接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,从 Java 8 开始,接口也可以拥有默认的方法实现,因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。

    备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。

    13.对象相等和引用相等的区别:对象相等比较的是内存中的内容,引用比较的是地址

    14.==和equals,==对于基本类型比较值,对于引用类型比较地址;equals方法如果没有被覆盖和==一样,如果被覆盖了就根据内容比较。42 == 42.0为什么是true

    15.为什么重写equasl的时候也要重写hashCOde?

    因为equals()用来判断两个对象是否等价,hashCode是根据对象的内容算出散列值,要求等价的两个对象散列值一定相等,所以equals()的时候应该一起覆盖hashcode(),保证等价的两个对象散列值也相等。

    16。线程,程序,进程

    程序是静态的概念,是静态的代码,进程是程序的一次执行过程,是资源分配和调度的基本单位。

    17.关于final关键字

     final修饰的基本类型数据,那么值不可改变,如果是引用类型,那么引用不可变。

     final修饰一个类,那么类不能被继承,

     final修饰的方法,在继承体系中可以防止子类重写。

    18.java中的异常

    异常的祖先是Throwable类,下面有Error和Exception两个子类,Error一般是程序运行时jvm出现的问题,比如oom,Exception是程序本身可以处理的异常。

    finally哪怕try和catch里面有return也会执行。

    19.什么是受检异常和非受检异常?

    非受检异常是编程错误,自己无法预料的,所有 RuntimeException和它的子类还有 Error,他们不需要在编译的时候处理。

    受检异常是可以恢复的,比如读写文件要catch IOException。

    20.java序列化中有些字段不想序列化怎么办?

    对不想序列化的变量用transient。

    transient关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法。

    21.static的用法:

     修饰变量和方法。被static修饰的东西放在方法区。

     静态代码块(静态代码块—>非静态代码块—>构造方法,该类不管创建多少对象,静态代码块只执行一次)

     静态内部类。

    相关文章

      网友评论

          本文标题:java基础0

          本文链接:https://www.haomeiwen.com/subject/wqevuqtx.html