Java虚拟机是可以执行Java字节码的虚拟进程,Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java语言的跨平台就是Java源程序被javac编译器编译成字节码.class文件的跨平台,各个平台装有不同的jvm,而jvm能将相同的字节码.class文件通过解释器解释为平台相关的机器码,进而执行。
JRE是Java运行时环境,它包含了JVM和Java的核心类库,它可以运行已经被编译的Java源文件。
JDK是Java开发工具,它包含了JRE还有javac编译器,还包含了很多Java程序调试和分析工具:jconsole,jvisualvm等工具软件,还包含了Java编译程序所写的文档和demo子程序。
如果只是运行以及编译好的程序只需安装JRE,但是你想编译程序就必须安装JDK
static关键字表明一个成员变量或者成员方法可以在没有实例化对象的时候调被访问。static方法不能别覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的,static方法跟类的任何实例都不相关。
Java中不可以覆盖private方法,因为private修饰的变量和方法只能在当前内中使用,但是,方法覆盖是继承中实现的,但是private修饰的方法在子类中时不能被访问的,所以不能被覆盖。
不可以,因为static是随着类的加载而加载的,也就是在编译的时候就已经加载了,而且只加载一次,如果在static环境中访问非static还没有创建实例,所以会报错。
Java支持哪些基本数据类型?什么是自动拆装箱?整数型:byte 1字节 8位,short 2字节16位,int 4字节32位,long 8字节64位。
浮点型:float 4字节32位,double 8字节64位字符型:char 2字节16位。
布尔型:boolean 1字节8位。
自动装箱就是Java编译器javac在基本数据类型和对应的对象包装类型(引用类型)的转化,反之就是自动拆箱。
Java支持的数据类型有两种:基本数据类型和引用类型:如string,其实是对象的引用,JVM中虚拟栈中存放的是地址,而对象是存放在堆中的,通过地址来找到堆中的实质对象,就是引用类型,为什么要进行转换,就是因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换,集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。
方法覆盖也就是方法重写:它是发生在继承的时候的子类去覆盖父类的方法,它的方法名和参数列表以及返回类型(或者是原类型的子类型)必须相同,访问权限必须必父类的大,异常不能比原方法抛出更多,被重写的方法不能是final,private,static,static是编译时执行的,此时并没有实例对象,并不能重写。
方法重载:它是发生在一个类中的,方法名必须相同,参数列表必须不同,可以是参数个数不同,也可以是参数类型不同,还可以是参数类型的顺序不同,它的返回类型可以随意,异常也没有要求,重载是编译是发生的,因为编译器可以根据参数来选择调用方法。父类的方法只能被子类重写一次,而方法重载可以有多个。
构造方法是用来初始化对象的,构造函数的方法名必须与类名一致,没有返回值,默认构造函数没有参数,构造方法重载方法名一致,参数列表不一样,创建实例对象的时候会根据参数列表来选择使用哪个构造函数,如果没有构造函数Java编译器会自动创建一个默认的构造函数,复制构造方法简单来说就是拷贝方法,然而Java中没有复制构造函数的概念,因为,没有默认的复制构造函数,Java中是不会自动创建一个默认的复制构造函数的,这个概念是c++中的。
Java中支持多继承吗?不支持,主要是出于安全考虑,如果是多继承的话,若子类继承的多个父类中有相同的方法或属性的时候,子类不知道到底要调用哪一个,但是却支持多接口,因为,接口中是没有实现具体的方法的,只有方法,多接口实现必须重写接口中的所有方法,接口的作用主要是用来扩展对象的功能的
接口和抽象类的区别?接口中的方法所有都必须是抽象的方法,而抽象类中可以有抽象方法也可以有非抽象方法。
类可以实现多个接口,但只能继承一个抽象类。
类可以不实现接口和抽象类中的所有抽象方法,但是此时类必须是抽象的。
接口中的变量都是final修饰的,而抽象类中可以包含非final变量。
接口中的方法默认是public(可以有default方法,以及static方法且static必须带有方法体这是JDK8新增的特性),抽象类中可以是private,protected和public。
接口是绝对抽象的,不可以被实例化,抽象类也是不可以被实例化
值传递是指在调用函数是把实际参数复制一份传递到函数中,如果对参数进行修改不会影响到实际的参数。
而引用传递是指在调用函数的时候把实际参数放在栈中的地址直接传入到函数中,如果对参数进行修改会影响到实际的参数,但是只是把值改变了,但是却没有改变具体的这个对象,因为具体的对象是放在堆中的,所有两者其实都是值传递,只是一个是拷贝一份传过去值,一个是直接传地址。
Java中只有值传递没有按引用传递。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)