java之面试题

1.jdk ,jre,jvm三者关系关系?

JVM:英文全称,Java Virtual Machine,是Java虚拟机,用来运行Java程序
JRE:英文全称,Java Runtime Environment,是Java运行时环境,里边包含了Java运行时所需要的类库。
JDK:英文全称,Java Development Kit,是Java开发工具包,里边包含了Java的开发工具。例如java,javac等。
JRE=JVM+libs【Java运行时所需要的类库】
JDK=JRE+java开发工具
在这里插入图片描述

2.同一个源文件当中能出现几个由public修饰的类?

可以没有或者出现一个, 有的话只能有一个,并且类名要与源文件的名称相同。可以出现多个类。
被public修饰的类叫做主类。java程序是从一个public类的main函数开始执行的,就像C程序是从main()函数开始执行一样。只能有一个public是为了给类装载器提供方便。 一个public只能定义在以它的类名为文件名的文件中。
每个编译单元都只有一个public类。因为每个编译单元都只能有一个公共接口,用public来表现。该接口可以按照要求包含众多的支持包访问权限的类。如果有一个以上的public,编译器就会报错。并且public类的名称必须与文件名相同(严格区分大小写)。当然一个编译单元内也可以没有public类。

3.同一个源文件当中能出现多个主方法吗?

可以。但是一个类当中只能有一个主方法。

4.java里面的char类型的变量能不能存一个中文汉字?

可以,java支持Unicode编码。可以存中文,因为char类型的变量占两个字节。
c语言不能。char类型占一个字节。
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。不过不可以存储unicode编码字没有收集的特殊汉字。
补充:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

5.对数组排序

  1. Arrays工具类里面的sort方法

  2. int [] arr={9,8,6,34,90};
      int max=arr[0];
     for (int i=1;i<arr.length ;i++ )
     {
     	if(max<arr[i])
     		max=arr[i];
     }
     System.out.println(max);      */
    
  3. arr[index]
    arr.length-1

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

1) 象类: 描述某一类事物
接口: 描述某一个功能
2)抽象类里面可以定义抽象方法和非抽象方法和变量。
接口只能定义抽象方法和静态常量
3) 抽象类可以定义构造器,不能实例化
接口不能定义构造器,不能实例化
4)抽象类需要被子类继承,而且只能是单继承 如果继承抽象类的子类是一个非抽象类的话,必须对抽象类当中的方法重写 extends
接口 需要被子类实现,使用implements关键字
接口可以与接口之间进行多继承
类还可以对接口进行多实现
5)定义时关键字不一样
抽象类 abstract class
接口 interface

7.重载和重写区别

1:定义的环境不一样
重载: 本类当中
重写:继承关系当中
2:形式上
重载的特点: 方法名称相同,参数列表不同 和返回值类型无关
重写的特点: 方法名称相同,参数列表相同 返回值也相同
3:细节
重写:
访问权限: 子类的访问权限要大于等于父类的访问权限
异常:父类抛出的异常必须大于子类抛出的异常。

8.在具有继承关系的类族当中,执行顺序

父类的静态块
子类的静态块
父类的动态块
父类的构造器
子类的动态块
子类的构造器

9.怎样理解多态

静态多态和动态多态
静态多态的体现形式: 方法的重载。
动态多态的体现形式: 相同的消息被不同的对象所接收,产生不同的行为结果。
一个类里面的一个方法 它的参数是一个接口的类型 调用参数的时候由于传递的对象不同,会产生不同的行为结果。

10.下面哪些方法和 void show(int a,char b,double c);构成方法的重载

void show(int b,char a,double c); 方法名称相同,参数列表相同(数据类型的顺序相同) 同一个方法 不构成
void show(char b,int a,double c);
void show(int a);
void show1(int b,char a,double c); 方法名称不同
int show(int b,char c,double a); 不构成
int show(char b,double c); 构成

11.==和equals方法的区别

可以比较基本数据类型 也可以比较引用类型
的操作数为基本数据类型的时候比较的是值
的操作数为引用类型的是,比较的是地址值。
equals方法的操作数只能是引用类型的。
Object类里面的equals方法比较的是地址值。
String类里面的equlas方法是已经重写了的方法,比较的是字符串的内容。
我们可以对自定义类的equals方法进行重写,如果不重写,比较的还是地址值。

12.equals方法的重写步骤

1:判断参数对象是否为空,如果为空,返回false。
2:判断参数对象与调用对象是否是同一个对象,如果是,返回true.
3:判断参数对象与调用对象是否属于同一个类,如果不属于,返回false。
4:比较具体的属性值,相同,返回true。、

13.String s=new String(“abc”);创建了几个对象。

	//创建了2个对象
	//把"abc"存到常量池当中。  然后创建了副本s在堆空间。
	String str="abc";//把"abc"存到常量池当中。
	String str1=new String("abc");//会拿着"abc"去常量池里面找,找到了,把地址值直接引用过来。
	//第二句话创建了几个对象
	//1个对象。只创建了副本。

14.final,finalize,finally 区别

final可以修饰类 最终的类 不能被继承
方法 不能被重写
变量 最终变量 全局常量在声明时必须赋值。

15.try,catch,finally执行顺序

先执行try块当中的内容。如果检测到异常,执行catch块中的内容 ,最后执行finally块中的内容。try块当中发生异常的语句下面的语句不执行。
如果没有检测到异常,直接执行finally块中的内容。

16.String、StringBuffer 、StringBuilder的区别

String 是一个定长的字符序列 它的序列内容和长度一旦被改变,就会产生一个新的字符串
StringBuffer 是可变的字符序列,它的序列内容和长度一旦被改变,返回的还是原来的字符串。 自带缓冲区 自动扩容, 提供了完全相同的API方法。
StringBuilder
StringBuffer: 线程同步 数据安全 效率低 JDK1.0
StringBuilder: 线程异步 数据不安全 效率高 JDK1.5

17.ArrayList 和Vector异同点

相同点: 底层都是数组, 元素可以重复, 有序, 支持下标访问。
不同点:Vector类: 在JDK 1.0 固有的类, 在JDK1.2的添加到集合框架当中的。 Vector类当中所有的方法都是 同步的,数据安全的, 效率低。
ArrayList: 在JDK1.2 添加的新的类。 ArrayList类当中所有的方法都是 : 异步的, 数据不安全的, 效率高的。

18.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值