.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();
}
} 有错吗?
答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量
(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。3.abstract class Something {
private abstract String doSomething ();
} 这好像没什么错吧?
答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract 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里我们修改了o的reference
(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable (成员变量),而o的reference并没有改变。
6.
class Something {
int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
有什么错呢? 看不出来啊。
答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。
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();
}
}
相关推荐
- 抽象方法不能用 `static` 或 `private` 修饰,因为静态方法与特定实例无关,而私有方法在子类中不可见。 - 类不能同时是 `final` 和 `abstract`,因为 `final` 禁止继承,而抽象类设计的初衷就是被继承。 6. **...
静态方法和静态变量是属于类所有,所有对象共享。静态代码段在类加载时执行,只执行一次。在静态方法中,不能直接调用非静态属性或者方法。 7. 构造方法 构造方法是特殊的方法,它的名称与类名相同,没有返回值,...
Java 8之后,接口可以包含默认方法和静态方法,但仍不能有实例字段或构造函数。 - 抽象类可以包含成员变量,而接口只能有常量(final static)。 4. **访问权限** - 抽象类的访问修饰符可以是public、protected、...
1. 抽象类可以包含抽象方法和非抽象方法,而接口只能包含抽象方法和静态常量。 2. 抽象类可以被实例化,而接口不能被实例化。 3. 抽象类可以继承其他抽象类或接口,而接口只能继承其他接口。 思考题: A. 非抽象类...
3. 抽象方法可以是静态的,但这样的方法不能在非抽象类中定义,因为静态方法属于类而不属于实例,这与抽象方法的定义相矛盾。 4. 抽象类可以是public、protected或默认,但不能是private,因为private类在任何地方...
- 从Java 8开始,接口可以包含默认方法(带有实现的抽象方法)和静态方法,这增加了接口的灵活性。 - 接口之间可以使用`extends`关键字实现继承,一个接口可以继承多个接口,如`interface DerivedInterface ...
因为静态方法是独立于任何实例化对象,是属于类本身,所以静态方法必须被实现,不能是抽象的。 7. 静态方法经常作为工具方法。例如:Math.sqrt(参数)。 8. 静态代码块:静态代码块是在类中独立于类成员的 static ...
4. **静态方法**(static):静态方法属于类,而不是类的实例。它们可以通过类名直接调用,不依赖于对象实例。 5. **抽象方法**:只有方法签名,没有实现,必须在抽象类中定义,并由其子类提供具体实现。 类变量...
- **静态方法**:静态方法与类相关联,而非任何特定实例。它们不能访问非静态成员,因为非静态成员依赖于具体对象。静态方法通常用于工具类,如计算、验证等不涉及实例状态的操作。例如,`public static void print...
- 抽象类不能包含抽象静态方法,因为抽象方法需要子类实现,而静态方法是类级别的。 16. **抽象与非抽象方法共存**: - 抽象类可以同时包含抽象方法和非抽象方法,抽象方法必须由子类实现,非抽象方法则有默认...
* 静态方法 * 代码块 * 静态代码块 抽象方法的特点 1. 抽象方法是没有方法体的方法,它们必须被子类实现。 2. 抽象方法只能定义在抽象类中。 3. static和abstract关键字不能共存,static关键字用于方便调用,...
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的...
5. **静态方法**:抽象类中可以包含静态方法,静态方法属于类而不是类的实例,因此与抽象类的实例化无关。 6. **抽象类与内部类**:除了顶级类,内部类也可以声明为抽象的。这样做时,外部类不必也是抽象的,但如果...
- 静态方法:同样,`static function`声明的方法也不需要通过对象实例来调用,它们与类关联而非实例。静态方法通常用于工具类或工厂方法等场景,其中不需要实例化对象就能完成特定任务。 示例代码: ```php ...
- 接口中的方法默认都是抽象的,但从Java 8开始,接口可以包含默认方法和静态方法。 3. **成员变量**: - 抽象类可以有成员变量。 - 接口中的成员变量默认是`public static final`。 4. **默认行为**: - 抽象...
3. 方法实现:抽象类中的抽象方法可以有默认实现,而接口中的方法没有默认实现,除非是在Java 8及以上版本中引入的默认方法和静态方法。 4. 访问修饰符:抽象类中的方法可以有不同的访问修饰符,而接口中的所有方法...
但自Java 8起,接口可以包含默认方法和静态方法,为实现类提供默认实现。 ##### 3. 成员变量 - **抽象类**:可以包含实例变量。 - **接口**:只能包含静态常量(默认为public static final)。 ##### 4. 访问修饰...
- 静态方法可以调用其他静态方法,既可以使用类名直接调用,也可以使用`self::`关键字来调用当前类的静态方法。 - `self::`关键字推荐使用,因为它更清晰地表明了调用的是当前类的静态成员,与实例对象使用的`$this`...
抽象类可以有构造函数、非抽象方法、变量等,但是含有抽象方法的类必须被声明为抽象类。值得注意的是,Java支持单继承,意味着一个类只能直接继承一个抽象类,但可以通过接口实现多重继承的效果。 接口(interface...