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.对数组排序
-
Arrays工具类里面的sort方法
-
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); */
-
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类当中所有的方法都是 : 异步的, 数据不安全的, 效率高的。