Java程序员面试常被问到的问题之一



[size=medium]1、作用域public、private、protected以及不写时的区别?
   public:其作用范围是不同的包、同一个包或者类都可以使用;
   private:只有同一个类中的才能使用;
   protected:不同的包但如果是该类的子类可以使用、同一包或类可以使用;
   不写:同一个包、同一个类中可以使用。

2、编程:输出如下图形
   ******
   *****
   ****
   ***
   **
   *[/size]
public class Show(){
     public static void main(){
      for(int i=0; i<6; i++){
        for(int j=6; j>i; j--){
          System.out.print("*");
        }
       System.out.println();
      }
    }
   }

[size=medium]3、谈谈Java的事件委托机制以及垃圾回收机制。
Java的事件委托机制是指一个源产生一个事件并将它送到一个或多个监听器那里。在这个方案中监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器就将处理这个事件,然后返回。
垃圾回收是将分配给对象的堆内存空间中不再使用的部分回收或释放的过程。如果一个对象么有指向它的引用或者其赋值为空,则此对象适合进行垃圾回收。

4、排序都有哪些方法?请列举。并用Java实现其中一种方法。
排序的方法一般有:插入排序,也叫直接插入拍寻或者希尔排序;交换排序,也叫冒泡排序或者快速排序;选择排序,也叫直接选择排序或者堆排序;归并排序;分配排序,也叫箱排序或者基数排序等。
下列用插入排序方法将一个数组排序:
[/size]
[code="java"]public class InsertSortTest{
 private static int a[] = {55,25,3,4,22,9};

 public static void main(String[] args) {
  BubbleSort bs = new BubbleSort();
  System.out.println("排序前:");
  display(a);
  
  for(int i=1;i<a.length;i++) {
  
   for (int j=i; j>0; j--) {
    
    if(a[j] < a[j-1]) {
     int temp = a[j];
     a[j] = a[j-1];
     a[j-1] = temp;
    }else {
     break;
    }
   }
  }
  System.out.println();
  System.out.println("排序后:");
  display(a);
 }

 private static void display(int[] al2) {
  for (int i = 0; i < al2.length; i++) {
   System.out.print(al2[i]+"  ");
  }
 }
} [/code]


5、谈谈方法的重载与方法的覆写的区别。

方法的重载,在英文中表示为:Overloading,而方法的覆写为Overriding。
方法的重载是指方法的名称虽然相同,但是其参数的类型或个数不同的方法,并且可以改变返回值的类型。
而方法的覆写则是指方法名称、参数的类型、返回的参数全部相同。并且要求被覆写后的方法不能比父类方法
拥有更严格的权限,并且私有方法是不能被覆写的。但是方法的重载没有这些要求。
最后发生的范围不同:方法的重载发生在一个类中,而方法的覆写发送的继承关系中。


6、谈谈this关键字与super关键字的区别。

答:首先从属性访问角度上看,this关键字是访问本类中的属性,如果本类没有此属性则从父类中继续查找,
而super是访问父类中的属性;
    其次从方法本身的角度来看,this是访问本类中的方法,如果本类中没有此方法则从父类中继续找,而
super是访问父类中的方法;
    再次,从调用构造方法的角度看,this是调用本类的构造方法,必须放在构造方法的首行,而super是指
调用父类的构造,必须放在子类构造方法的首行;
    最后的区别是:this代表是当前对象,而super无此概念。

7、如此声明并实例化对象:String str = new String("Fun"); 创建了几个对象?
答:创建了两个对象,new了一个对象,然后"Fun"本身是一个字符串对象。

8、是否可以从一个static方法内部发出对非static方法的调用?
答:不能,因为静态(static)方法,是全局的,如果调用了非全局的方法,就不能初始化该对象

9、编程:用Java编写堆栈。
public class StackDemo {

 int[] data;
 int maxSize;
 int top;
 public StackDemo(int maxSize) {
  this.maxSize = maxSize;
  data = new int[maxSize];
  top = -1;
 }
 
 /**
  * 依次加入数据
  * @param data 要加入的数据
  * @return 添加是否成功
  */
 public boolean push(int data) {
  if(top+1== maxSize) {//top相当如标记,初始值为-1,由0开始计数,所以要+1
   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 {
  StackDemo stack=new StackDemo(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());
  }  
 }
}

10、面向对象有哪些特征?
答:面向对象有4个组要特征:
 (1)、抽象:找类的共性,将共有的属性放入父类中。
 (2)、继承:子类继承父类,具有父类所有的属性和方法,可以重用,也可以覆盖,这样
子类扩展了父类的功能。
 (3)、封装:将相关属性和方法私有化,只留下相关方法来调用它们。
 (4)、多态:父类对象引用子类对象。

11、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能,抽象的类也不能是final的,因为final的类是不能有子类的。而抽象类是必须要有子类来继承的。

12、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值