面试题整理-01
2015-07-17 23:13
666 查看
1.
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。
hy-think:之前一直有想 如果父类的属性变成了private了, 那子类不就无法继承么
可是,后来觉得这个是没有问题的,,因为子类继承了父类的get/set方法
2.
有一个类为ClassA,有一个类为ClassB,
在ClassB中有一个方法b,此方法抛出异常,
在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。
在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。
完成这个例子,请说出java中针对异常的处理机制。
异常分为:编译时异常和运行时异常
处理方式:抛。。。捕获处理
3.
编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象,并调用该对象中的方法。
4.
将字符串中进行反转。abcde –> edcba
5.
分析以下程序运行结果,说明原理。(没有分析结果不得分)
运行结果:
B
A
B
6.
一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为”abc”的字符串元素,请用代码实现。
7.
分析运行结果,说明原理。(没有分析结果不得分)
结果是:
102
102
102
hy-think:
list加入的是对象的引用
也就是说,同一个对象加了三次,只是三次当中每次的值有所改变
但引用不变,最后调取的是引用,所以结果就是102
8.
方法中的内部类能不能访问方法中的局部变量,为什么?
内部类 → 也是类 → 存在堆中 → 对该类的引用消失时 → 内部类才会消亡
局部变量 → 存储在栈中 → 调用结束时就会退栈
也就是说内部类的生存周期,超过了局部变量的生存周期,内部类可能调用到已消亡的属性
因此,内部类不能调用方法中的局部变量
9.
写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。
class Employeer{ private String name; private int id; private int salary; public Employeer(String name, int id, int salary){ super(name, id, salary); } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public void setId(int id){ this.id = id; } public int getId(){ return this.id; } public void setSalary(int salary){ this.salary = salary; } public int getSalary(){ return this.salary; } }
hy-think:之前一直有想 如果父类的属性变成了private了, 那子类不就无法继承么
可是,后来觉得这个是没有问题的,,因为子类继承了父类的get/set方法
2.
有一个类为ClassA,有一个类为ClassB,
在ClassB中有一个方法b,此方法抛出异常,
在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。
在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。
完成这个例子,请说出java中针对异常的处理机制。
class A{ void a() thorws Exception{ B b = new B(); b.b(); } } class B{ void b() { throw new Exception("B ... b ... Exception"); } } class TestC{ void c(){ try{ new A().a(); }catch(Exception e){ e.getMessages(); } } }
异常分为:编译时异常和运行时异常
处理方式:抛。。。捕获处理
3.
编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象,并调用该对象中的方法。
class Iprint1{ void print(){ System.out.println("hellow world !"); } } class Test{ public static void main(String args[]) throws Exception{ Class clazz = Iprint1.class; Object o = clazz.newInstance(); Method method = clazz.getDeclaredMethod("print", null); m.setAccessible(true); method.invoke(o, null); } }
4.
将字符串中进行反转。abcde –> edcba
public String reversion77(String str){ String newStr=""; //用charAt从后面截取字符串 然后组装 for(int i=str.length()-1; i>=0; i--){ newStr = newStr + str.charAt(i); } return newStr; }
5.
分析以下程序运行结果,说明原理。(没有分析结果不得分)
public class ThreadTest { public static void main(String args[]) { MyThread t = new MyThread(); t.run(); //.run()只是掉要run方法,后面的sleep()是睡的主线程,让主线程停3秒... 因为此时只有主线程,所以程序会停3秒 t.start(); //start是开启线程,自动调用内部的run方法,也就是说,这个线程是除主线程之外,另外开的一个线程。 //sleep睡的是这个另开的线程,在这个线程被睡的时间内,别的线程可以享用cpu资源 System.out.println("A"); } } class MyThread extends Thread { public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { } System.out.println("B"); } }
运行结果:
B
A
B
6.
一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为”abc”的字符串元素,请用代码实现。
public ArrayList removeStr(ArrayList arr){ for(ListIterator it = arr.listIterator; it.hasNext();){ Object o = it.next(); if("abc".equals((String)o)){ arr.remove(); } } return arr; }
7.
分析运行结果,说明原理。(没有分析结果不得分)
import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList<Data> list = new ArrayList<Data>(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } }
结果是:
102
102
102
hy-think:
list加入的是对象的引用
也就是说,同一个对象加了三次,只是三次当中每次的值有所改变
但引用不变,最后调取的是引用,所以结果就是102
8.
方法中的内部类能不能访问方法中的局部变量,为什么?
内部类 → 也是类 → 存在堆中 → 对该类的引用消失时 → 内部类才会消亡
局部变量 → 存储在栈中 → 调用结束时就会退栈
也就是说内部类的生存周期,超过了局部变量的生存周期,内部类可能调用到已消亡的属性
因此,内部类不能调用方法中的局部变量
9.
写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
import java.lang.reflect.Field; /* * * 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value. * * public void setProperty(Object obj, String propertyName, Object value){...} * * hy_think: * 仅仅只要写一个方法就行,,, * ,,,>设置属性值,,》但我不知道这个属性是什么,,》 * * ,,》只知道他有个属性交property,,,》并且要传入的值是value * * ,,》用反射做 * * 1.取得object类的class文件 * 2.取得属性 * 3.设置属性的访问权限为true * 4.将值赋给属性 * */ public class Demo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } public void setProperty(Object obj, String propertyName, Object value){ try { Class clazz = obj.getClass(); Field fdPN = clazz.getDeclaredField("propertyName"); fdPN.setAccessible(true); fdPN.set(obj, value); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 2015071702 - 职场如战场
- 黑马程序员--java单列设计模式
- 黑马程序员_初识ios来源发展使用
- 黑马程序员----反射
- 黑马程序员----Java阶段性总结
- 黑马程序员----正则表达式,OMG
- 黑马程序员----浅谈RandomAccessFile格式化数据问题和多个对象序列化存取的两个方法
- leetcode难度及面试频率
- 阿里电话面试总结
- 黑马程序员----IO流(下)
- javaWeb面试题
- 黑马程序员——JavaIO流
- 黑马程序员----java中强大的功能-反射
- iOS--面试--收集
- 程序员父亲的遗产——编程十诫
- (剑指Offer)面试题28:字符串的排列
- 互联网蜗牛求职记--笔试面试汇总
- 互联网蜗牛求职记--笔试面试汇总
- 记录一下职业生涯第二次求职的经历
- 黑马程序员-OC-继承