java编程语言的特点、优势?
简单,稳定。面向对象。跨平台性。解释型语言(非纯解释性语言,先编译后运行)。多线程。多态性,可靠,安全。
谈谈你对Linux操作系统的认识?和windows有什么区别?常用命令有哪些?
Linux与Windows目录结构的区别:
- 文件系统不同: Linux:目录 Windows:盘符
- 外部设备映射不同: Linux:挂载点 Windows:盘符
- 安全级别不同: Linux:高 Windows:低
Linux常用命令:
- pwd:显示当前工作目录
- ls:查看当前工作目录的内容
- cd:改变当前工作目录 . :当前目录 .. :上一级目录
Java的运行过程?
- pwd:显示当前工作目录
- ls:查看当前工作目录的内容
- cd:改变当前工作目录 . :当前目录 .. :上一级目录
Java的运行过程?
一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
public class base{
}
class A{
}
class B{
}
简述:JDK,JRE,JVM的关系?
java的八大基本类型以及各自的字节数和位数?
1字节=8位
- 整数类型: byte(1字节) short(2字节) int(4字节) long(8字节) 浮点类型: fioat(4字节) double(8字节)char(2字节)boolean(1字节)
不同的基本类型直接可以互相转换:
自动类型转换(隐式类型转换) :从小类型到大类型可以自动完成。类型的大小关系如下所示
byte-->short-->int-->long-->float-->doublechar-->int 强制转换: 从小类型到大类型需要相纸转换符:
(需要转换成的类型)变量但这样转换可能会造成精度损失或者溢出
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
Java有没有goto关键字?
&和&&的区别?
在JAVA中如何跳出当前的多重嵌套循环?
ok;
for(int i=0; i<10; i++){
for(int j=0; i<10;j++)
System.out.println("i="+i+",j="+j)
if(j==5)
break ok;
}
Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
switch 语句能否作用在byte上,能否作用在long上,能否作用在String上 ?
break,continue,return 的区别? (面)
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
比如:final StringBuffer a=new StringBuffer("abc");
执行如下语句将报编译错误:
a=new StringBuffer("123");
但是,执行如下语句则可以通过编译:
a.append("def");
内存管理?
成员变量和局部变量的定义以及生命周期?
局部变量:
1) 定义在方法中;
2) 没有默认值,必须自行设定初始值;
3) 方法被调用时,存在栈中,方法调用结束时局部变量从栈中清除;
成员变量:
1) 定义在类中,方法外;
2) 由系统设定默认初始值,可以不显式初始化;
3) 所在类被实例化后,存在堆中,对象被回收时,成员变量失效;
static关键字可以修饰什么?
静态变量和实例变量的区别?
冒泡排序的原理及代码实现?
冒泡的原理:
1)假设有4个数,4个数冒三轮
2)每一轮都是从第1个元素开始比,
每一次都是和它的下一个元素比
3)冒出来的就不带它玩了
代码实现:
int arr[]={10,9,1,20,19,30,5};
public static void main(String[] args) {
for(int i=0;iarr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}}}
for(int i=0;i
方法的定义,返回值?
Overload和Override的区别?
重写的两同两小一大规则?
1.1)void时必须相等
1.2)基本类型时必须相等
1.3)引用类型时小于或相等:父类大,子类小
2)子类抛出的异常小于或等于父类的
一大:子类方法的访问权限大于或等于父类的
什么是类?什么是对象?
- 所有对象所共有的属性/特征(静的)---------成员变量
- 所有对象所共有的行为(动的)--------------方法
构造方法?
- 常常用于给成员变量赋初值,与类同名,没有返回值类型,在创建对象时被自动调用
- 若自己不写构造,则编译器默认提供一个无参构造,若写了构造,则不再默认提供
- 构造方法可以重载,但不可被继承,不可以被重写.
构造器Constructor是否可被重写override?
this关键字的用法?
- this.成员变量名------------访问成员变量
- this.方法名()--------------调用方法
- this()---------------------调用构造方法
super关键字的用法?
- super.成员变量名----------访问父类的成员变量
- super.方法名()------------调用父类的方法
- super()-------------------调用父类的构造方法
向上造型?
面向对象三大特征?
java中实现多态的机制是什么?
访问修饰符?
- public:公共的,任何类
- protected:受保护的,本类、子类、同包类
- 默认的:什么也不写,本类、同包类
- private:私有的,本类
abstract class抽象类和interface接口有什么区别?
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse不报错,但也不行,默认类型子类不能继承),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型.
- 抽象类中可以包含静态方法,接口中JDK1.8之前不可以有不能包含静态方法和成员方法,JDK1.8之后可以包含.但成员方法必须使用default修饰
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
- 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口并且可以继承多个接口,用逗号隔开.
内部类可以引用它的包含类的成员吗?有没有什么限制?
什么是匿名内部类?
- 若想创建一个类(子类)的对象,并且对象只被创建一个,此时该类不必命名,称 之为匿名内部类
- 匿名内部类中访问外部的变量,该变量必须是final的.
super.getClass()方法调用结果?
下面程序的输出结果是多少?
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
很奇怪,结果是Test
在test方法中,直接调用getClass().getName()方法,返回的是Test类名
原因在于:由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();
一个对象在什么情况下会被GC回收?
JAVA中调用方法传递方式是值传递还是引用传递?
String是最基本的数据类型吗?
String这个类能否被继承?
如何将GBK编码的字符串转换成ISO8859-1编码的字符串?
String str="Hello";
String str1=new String(str.getBytes("GBK"),"ISO8859-1");
System.out.println(str1);
String,StringBuffer,StringBuilder的区别?
String s="a"+"b"+"c"+"d"创建了几个对象?
String str=new String("abcdefg");创建了几个对象?
创建了两个对象,一个str引用指向堆内存中的String对象,另外一个则是String类有参构造方法中的直接量字符串对象,该字符串对象在字符串常量池中.
把创建的对象过程拆分成两部分就比较直观了:
String s="abcdefg";
String str=new String(s);
延伸问题:
如果在执行一次String str1=new String("abcdefg");此时共创建了几个对象?
上一次操作创建了2个对象,这一次操作创建了1个对象,一共3个.
因为在第一次常量池中已经有一个"abcdefg"字符串对象,第二个创建时并没有创建新的,而是拿过来直接用,只是创建了1个str1指向堆内存中的String对象,共3个.
补充:String对象的intern()方法会得到字符串对象在常量池中对应的引用(equals比较为true的字符串对象),如果常量池中没有该对应的字符串,则会把该字符串存入常量池,返回该字符串对象的引用.
它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true.
例如:
String str1 = "a";
String str2 = "b";
String str3 = "ab";
String str4 = str1 + str2;
String str5 = new String("ab");
System.out.println(str5.equals(str3));//true
System.out.println(str5 == str3);//false
System.out.println(str5.intern() == str3);//true
System.out.println(str5.intern() == str4);//false
第一、str5.equals(str3)这个结果为true,因为字符串的值的内容相同。
第二、str5 == str3对比的是引用的地址是否相同,由于str5采用new String引用第地址不相同,所以结果为false。
第三、当str5调用intern的时候,会检查字符串池中是否含有该字符串。由于之前定义的str3已经进入字符串池中,所以会得到相同的引用,所以比较为true。
第四,当str4 = str1 + str2后,str4的值也为”ab”,但是在字符串拼接的规则里, 如果+号两边有一个是变量,就会去创建新对象,str4并没有引用常量池中的地址.而是自己创建了一个新"ab"对象放在堆内存.所以比较为flase
如何把一段逗号分割的字符串转换成一个数组?
比如:
String str="java,php,c++,c#,web";
String [] array=str.split(",");
拆分后的结果为字符串数组.
final,finalize,finally的区别?
String这个类常用的处理字符串的方法?
StringBuilder这个类常用的处理字符串的方法?
和equals方法究竟有什么区别?
包装类的自动拆装箱?
Integer i = new Integer(1);
int n = i.intValue();
Double d = new Double(1.1);
double dn = d.doublevalue();
int i=128;如下情况的比较结果是?
Integer i1=new Integer(i);
Integer i2=new Integer(i);
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
输出的结果是false true
因为i1和i2使用new关键字new了两次,在堆内存中创建了2个对象,所以==比较为false,内容相同equals比较为true
Integer i3=Integer.valueOf(i);
Integer i4=Integer.valueOf(i);
System.out.println(i3==i4);
System.out.println(i3.equals(i4));
输出结果为false true
怎么把一个基本类型的值转换成字符串?
int a=100;
两种方式:
1)String str=a+"";
2)String str=String.valueOf(a);
反过来把一个字符串数值转成一个基本类型:
String str="100";
int a=Integer.parseInt(str);



