抽象方法、final、静态方法

.abstract class Name { 
 private String name; 
 public abstract boolean isStupidName(String name) {} 

  这有何错误?

答案错。abstract method必须以分号结尾,且不带花括号。

2.public class Something { 
 void doSomething () { 
  private String s = ""; 
  int l = s.length(); 
 } 
有错吗?

答案错。局部变量前不能放置任何访问修饰符 (privatepublic,和protected)final可以用来修饰局部变量 
(final如同abstractstrictfp,都是非访问修饰符,strictfp只能修饰classmethod而非variable)3.abstract class Something { 
 private abstract String doSomething (); 
 这好像没什么错吧?

答案错。abstractmethods不能以private修饰。abstractmethods就是让子类implement(实现)具体细节的,怎么可以用privateabstract method封锁起来呢? (同理,abstract method前不能加final)

4.public class Something { 
 public int addOne(final int x) { 
  return ++x; 
 } 

  这个比较明显。

  答案错。int x被修饰成final,意味着x不能在addOne method中被修改。

5.

public class Something { 
 public static void main(String[] args) { 
  Other o = new Other(); 
  new Something().addOne(o); 
 } 
 public void addOne(final Other o) { 
  o.i++; 
 } 
}

class Other { 
 public int i; 

  和上面的很相似,都是关于final的问题,这有错吗?

  答案正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了oreference 
(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是omember vairable (成员变量),而oreference并没有改变。

  6.

class Something { 
 int i; 
 public void doSomething() { 
  System.out.println("i = " + i); 
 } 

  有什么错呢看不出来啊。

  答案正确。输出的是"i = 0"int i属於instant variable (实例变量,或叫成员变量)instant variabledefault valueintdefault value0

7.class Something { 
    final int i; 
    public void doSomething() { 
        System.out.println("i = " + i); 
    } 
} 
和上面一题只有一个地方不同,就是多了一个 final 。这难道就错了吗 ? 
  :  错。 final int i 是个 final  instant variable ( 实例变量,或叫成员变量 )  final  instant variable 没有 default value ,必须在 constructor ( 构造器 ) 结束之前被赋予一个明确的值。可以修改为 "final int i = 0;"   
8. 
public class Something { 
     public static void main(String[] args) { 
        Something s = new Something(); 
        System.out.println("s.doSomething() returns " + doSomething()); 
    } 
    public String doSomething() { 
        return "Do something ..."; 
    } 
} 
  看上去很完美。  
  :  错。看上去在 main  call doSomething 没有什么问题,毕竟两个 methods 都在同一个 class 里。但仔细看, main  static 的。 static method 不能直接 call non-static methods 。可改成 "System.out.println("s.doSomething() returns " + s.doSomething());" 。同理, static method 不能访问 non-static instant variable  

 

 

 

有1、2、3、4、5、6等六个数字, 
要求构造一个数组,其中4不能放在第三位, 
“3”和“5”不能相连。将所有可能情况输出.

 

 

 

public class Main {

 

public static void main(String[] args) {

 

 

 

int [] buf = {1,2,3,4,5,6};

 

fullSort(buf,0,buf.length);

 

}

 

 

 

//递归实现的全排列

 

private static void fullSort(int[] buf,int begin,int end){

 

if(end-begin==1){

 

return;

 

}

 

fullSort(buf,begin+1,end);

 

if(begin==0){

 

p(begin+"bbb"+end,buf);

 

}

 

//swap

 

for(int i=begin;i<end-1;i++){

 

int obj = buf[begin];

 

buf[begin] = buf[i+1];

 

buf[i+1] = obj;

 

p(begin+"bbb"+end,buf);

 

fullSort(buf,begin+1,end);

 

obj = buf[begin];

 

buf[begin] = buf[i+1];

 

buf[i+1] = obj;

 

}

 

}

 

 

 

//输出满足条件的数据

 

public static void p(String prefix,int []buf){

 

 

 

//其中4不能放在第三位

 

if(buf[2] == 4){

 

return;

 

}

 

 

 

//“3”和“5”不能相连

 

for(int i=0;i<buf.length-1;i++){

 

if((buf[i]==3&&buf[i+1]==5)||(buf[i]==5&&buf[i+1]==3)){

 

return;

 

}

 

}

 

 

 

for(int o:buf){

 

System.out.print(o);

 

}

 

System.out.println();

 

}

 

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值