一、Java面向对象:
1、super()与 this()的区别?
This():当前类的对象,super 父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而 this 他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写 super(),编译器会自动插入.但是如果父类没有不带参数的构
造函数,或这个函数被私有化了(用 private 修饰).此时你必须加入对父类的实例化构造.而 this 就
没有这个要求,因为它本身就进行实例化的构造.
而在方法中 super 和 this 使用的方法就差不多了.只不过 super 要考虑是否能访问其父类的资源.
2、作用域 public,protected,private,以及不写时的区别?
Public:不同包、同一包、类内都可用
Private:类内
Protected: 不同包的子类、同一包、类内都可用
不写时:同一包
3、编程输出如下图形。
* * * * *
* * * *
* * *
* *
*
代码如下:
publicclassPrint{publicstaticvoidmain(String[]args){for(inti=0;i<5;i++){for(intj=5;j>i;j--){System.out.print("*");}System.out.println();}}}
4、什么是 java 序列化,如何实现 java 序列化?(写一个实例)
序列化:
可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内
容读取,转化为一个对象。
处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行
读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作
时所引发的问题。
序列化的实现:
将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法,implements
Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如:
FileOutputStream) 来构造一个 ObjectOutputStream( 对象流 ) 对 象 , 接 着 , 使 用
ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出
(即保存其状态),要恢复的话则用输入流。
5、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
方法的重写 Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。
重载 Overloading 一个类多个方法,名称相同,参数个数类型不同。
两者都是 Java 多态性的不同表现。
Overloaded 的方法是可以改变返回值的类型。
1, public class Ctest()
{
Public static void main()
{
System.out.prinln(8+8+”88”+8+8);
}
}
168888
5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
答:父类:
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
输出结果:
C:>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create
6、用插入法进行排序代码如下
package test;
import java.util.*;
class InsertSort
{
ArrayList al;
public InsertSort(int num,int mod)
{
al = new ArrayList(num);
Random rand = new Random();
System.out.println("The ArrayList Sort Before:");
for (int i=0;i { al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println("al["+i+"]="+al.get(i)); } } public void SortIt() { Integer tempInt; int MaxSize=1; for(int i=1;i { tempInt = (Integer)al.remove(i); if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) { al.add(MaxSize,tempInt); MaxSize++; System.out.println(al.toString()); } else { for (int j=0;j { if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) { al.add(j,tempInt); MaxSize++; System.out.println(al.toString()); break; } } } } System.out.println("The ArrayList Sort After:"); for(int i=0;i { System.out.println("al["+i+"]="+al.get(i)); } } public static void main(String[] args) { InsertSort is = new InsertSort(10,100); is.SortIt(); } } JAVA 类实现序例化的方法是实现 java.io.Serializable 接口 Collection 框架中实现比较要实现 Comparable 接口和 Comparator 接口 7、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我 ABC"4,应该截为"我 AB",输入"我 ABC 汉 DEF",6,应该输出为" 我 ABC"而不是"我 ABC+汉的半个"。 答:代码如下: public static void split(String source,int num) throws Exception { int k=0; String temp=""; for (int i = 0; i { byte[] b=(source.charAt(i)+"").getBytes(); k=k+b.length; if(k>num) { break; } temp=temp+source.charAt(i); } System.out.println(temp); } 8、指出下面程序的运行结果。 class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello{ public static void main(String[] ars){ A ab = new B(); //执行到此处,结果: 1a2b ab = new B(); //执行到此处,结果: 1a2b2b } } 注:类的 static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的 加载,首先要执行其基类的构造,再执行其本身的构造 9、抽象类和接口的区别? (1)接口可以被多重 implements,抽象类只能被单一 extends (2)接口只有定义,抽象类可以有定义和实现 (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见) 当功能需要累积时用抽象类,不需要累积时用接口。 10、什么是类的返射机制? 通过类(Class 对象),可以得出当前类的 fields、method、construtor、interface、superClass、 modified 等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring 中一切都是返 射、struts、hibernate 都是通过类的返射进行开发的。 11、类的返射机制中的包及核心类? java.lang.Class java.lang.refrection.Method java.lang.refrection.Field java.lang.refrection.Constructor java.lang.refrection.Modifier java.lang.refrection.Interface 12、得到 Class 的三个过程是什么? 对象.getClass()类.class 或 Integer.type(int) Integer.class(java.lang.Integer) Class.forName(); 13、如何唤起类中的一个方法? 产生一个 Class 数组,说明方法的参数 通过 Class 对象及方法参数得到 Method 通过 method.invoke(实例,参数值数组)唤醒方法 14、如何将数值型字符转换为数字(Integer,Double)? Integer.parseInt(“1234”) Double.parseDouble(“123.2”) 15、如何将数字转换为字符? 1+”” 1.0+”” 16、如何去小数点前两位,并四舍五入? double d=1256.22d; d=d/100; System.out.println(Math.round(d)*100); 17、如何取得年月日,小时分秒? Calendar c=Calendar.getInstance(); c.set(Calendar.YEAR,2004); c.set(Calendar.MONTH,0); c.set(Calendar.DAY_OF_MONTH,31); System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH)); 18、如何获取某个日期是当月的最后一天? 当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。 取下一个月的第一天,下一个月的第一天-1 public static void main(String[] args) { Calendar c=Calendar.getInstance(); c.set(Calendar.YEAR,2004); c.set(Calendar.MONTH,0); c.set(Calendar.DAY_OF_MONTH,30); Calendar c1=(Calendar)c.clone(); System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH)); c.add(Calendar.DAY_OF_MONTH,1); if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH)) { System.out.println("是最后一天"); } else { System.out.println("不是取后一天"); } } 19、float 型 float f=3.4 是否正确? 报错,应当是 float f=3.4f 如果是 float f=3(整数)正确 20、说出一些常用的类,包,接口,请各举 5 个 常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.awt http://java.io java.util java.sql javax.xml javax.sevlet javax.ejb. http://java.net javax.faces 常用的接口 : List Map Document NodeList EjbObject EjbHome SessionBean EntityBean 21、java 中会存在内存泄漏吗,请简单描述。 会。如:int i,i2; return (i-i2); //when i 为足够大的正数,i2 为足够大的负数。结果 会造成溢位,导致错误。 22、java 中实现多态的机制是什么? 静态的多态:方法名相同,参数个数或类型不相同。(overloading) 动态的多态: 子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法 实现接口的实例传与接口的引用调用的实现类的方法。 23、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 动态内存 存放类实例 静态内存 类本身 垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。 或通过 System.gc()手动收集,但不保证一定执行。 24、静态变量和实例变量的区别? static i = 10; //常量 class A a; a.i =10;//可变 静态方法可以调用静态变量。 实现方法可以调用静态变量、实例变量 25、是否可以从一个 static 方法内部发出对非 static 方法的调用? 不可以,如果其中包含对象的 method();不能保证对象初始化. 26、写 clone()方法时,通常都有一行代码,是什么? Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。 27、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗? Try:执行部分,产生异常 Catch:捕捉异常 Finally:不管有没有异常都执行 Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。 Throw:抛出一个异常 在 try 中可以抛出异常,一般与声明的异常相同。 自定义异常要继承于 Exception 或 Exception 的子类 28、冒泡排序法 //相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较 public class BubbleSort { private static int al[] = new int[10]; public BubbleSort() { al[0]=2; al[1]=3; al[2]=23; al[3]=45; al[4]=1; al[5]=67; al[6]=23; al[7]=80; al[8]=35; al[9]=72; } public static void main(String[] args) { BubbleSort bs = new BubbleSort(); System.out.println("排序前:"); display(al); for(int i=0;i for (int j = 0; j < al.length-i-1; j++) { if(al[j]>al[j+1]) { swap(j,j+1); } } } System.out.println(); System.out.println("排序后:"); display(al); } private static void display(int[] al2) { for (int i = 0; i < al2.length; i++) { System.out.print(al2[i]+" "); } } private static void swap(int i, int j) { int temp = al[i]; al[i]= al[j]; al[j] = temp; } } 29、String and StringBuffer 的区别? String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。 StringBuffer:长度可变,可以将多个字符串值直接联合,效率高 30、用 java 代码编写堆栈 public class Stack { int[] data; int maxSize; int top; public Stack(int maxSize) { this.maxSize = maxSize; data = new int[maxSize]; top = -1; } /** * 依次加入数据 * @param data 要加入的数据 * @return 添加是否成功 */ public boolean push(int data) { if(top+1== maxSize) { System.out.println("栈已满!"); return false; } this.data[++top] = data; return true; } /** * 从栈中取出数据 * @return 取出的数据 */ public int pop() throws Exception{ if(top==-1) { throw new Exception("栈已空!"); } return this.data[top--]; } public static void main(String[] args) throws Exception { Stack stack=new Stack(1000); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); while(stack.top>=0) { System.out.println(stack.pop()); } } } 原文:https://zhuanlan.zhihu.com/p/61445688