在java学习中遇到的一些经典问题和解答(1)

1.什么是java虚拟机?为什么java被称作“平台无关的编程语言”

Java虚拟机是一个可以执行java字节码的虚拟机进程。。。
准确来说,java的跨平台是指java的源文件通过javac编译器变异成的二进制.class字节码的跨平台性。
各个平台因为装有不同的jvm,jvm能将相同的字节码编译成平台相关的机器码,进而执行。

2.JDK和JRE的区别是什么?

JDK:(java开发工具集)包含了JRE,编译器等。
JRE:(java运行环境)包含了jvm和需要执行的程序。
若只有JRE,则只能进行程序编译,不能进行开发。
只有安装JDK才能正常进行java程序的开发,编译和运行。

3.“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者static的方法?

“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
private不能被覆盖,因为private修饰的变量或方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖;
static也不能被覆盖,因为方法覆盖是基于运行时的动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,概念上不适用

4.是否可以在static环境中访问非static变量?

static变量在java中是属于类的,静态的成员属于类,随着类的加载而加载到静态方法区内存,当类加载时,此时不一定有实例创建,没有实例,就不能访问到非静态的成员。

5.Java支持的基本数据是有哪些?什么是自动拆装箱?

8种:
    整数值型:byte,short,int,long
    字符型:char
    浮点型:float,double
    布尔型:boolean
自动装箱:
      是java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:int转化为Integer,double转化为Double,等等。
自动拆箱:
	  自动装箱反过来就是

6.重载(overload)和重写(override)

overload:
  发生在一个类中,具体表现为多个方法具有相同的方法名,但其参数个数或者参数类型各不相同。记住与返回值的类型无关。
override:
  发生在子类和父类之间,具体实现是子类对父类中一个可访问(private修饰不可继承)方法的重写,保证其方法名,参数个数,参数类型不变。

7.Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?

个人看法,对比C++,就是C++中的构造函数,Java中的构造函数是为了初始化对象的,构造函数名和类名一致,默认的构造函数没有参数,没有返回值,构造函数的函数体中也没有内容。
构造函数的重载是函数名与类名相同,参数类型不同,参数不同。同样作用也是为了初始化对象。
**在Java中没有 拷贝构造函数的概念!!!**

8.Java支持多继承吗?

Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。但是接口支持多继承,即一个子接口可以有多个父接口。(接口的作用就是用来扩展对象的功能,当一个子接口继承多个父接口,说明子接口扩展了多个功能,那么当类实现接口时,类就扩展了相应 的功能)。

9.接口和抽象类的区别是什么?

1.接口的方法默认是public,所有的方法在接口中都不能有实现,都是抽象的。而抽象类可以有非抽象的方法。
2.接口中的实例变量默认是final类型,但抽象类中不一定。
3.一个类可以实现多个接口,但最多只能实现一个抽象类。
4.一个类实现接口就要实现接口的所有方法,抽象类则不一定。
5.接口不能用new实例化,可以声明,但是必须引用一个实现该接口的对象。

10.什么是值传递和引用传递?

值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
医用传递一般是对于对象变量而言的,传递的是该对象的地址的一个副本,并不是原对象本身。
**一般认为,Java内的基础类型传递都是值传递,java中实例对象的传递是引用传递。**

猜你喜欢

转载自blog.csdn.net/huangpeng_HP/article/details/86536644
今日推荐