------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
形式参数和返回值问题:基本类型传值,引用类型传址
包声明、导包、类声明的的顺序关系:packagecn.itcast; import java.util.*; public class Demo{}
访问控制修饰符(权限修饰符)
protected 可以被子类及同一个包中的类使用
protected 受保护的权限,成员修饰成员只给子类
被protected修饰的成员,只能在子类中super调用
默认访问控制的成员变量和方法可以被同一个包中的类调用
访问控制符修饰类
public 修饰的类可以被任何一个类使用;
默认访问控制的类只可以被同一个包中的类使用
访问控制符修饰成员
内部类:
定义在类的内部,根据位置不同,分为成员内部类和局部内部类
内部类可以直接访问所在外部类的成员,包括私有
外部类要访问内部类的成员,要创建对象
成员内部类创建对象
外部类名.内部类名 对象名 = 外部类对象.内部类对象
成员内部类的修饰符:
private 保证数据安全性
static 让数据访问更方便,被静态修饰的成员内部类只能访问外部类的静态成员
局部内部类:
可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
局部内部类的方法,访问局部变量,变量必须final 修饰,为什么?
/*
* 局部内部类方法,访问局部变量,变量必须 final 修饰,为什么必须有 final ?
* 加 final,解决什么问题
*
* 生命周期:
* 方法的生命周期,没有对象长
* out 方法运行出栈,变量 x 就会死亡
* 用了 Inner 类的对象,调用方法 in,造成变量已经死亡不能访问
*
* 变量加 final 修饰:
*
* final修饰变量 x,和内存的生命周期没有关系
* final本身含义固定变量值,终身不变
*
* javac编译的时候,直接将内部类方法变量 x,直接替换成 1
*/
publicclassInnerClass {
publicstaticvoid main(String[] args) {
Outerouter= newOuter();
Interfaceinterface1= outer.out();
interface1.in();
}
}
interface Interface {
publicabstractvoid in();
}
class Outer {
public Interface out() {
finalintx = 1;
class Inner implements Interface {
publicvoid in() {
/*
* Cannot refer to the non-final local variablex defined * in an enclosing scope
*/
System.out.println("局部内部类的方法in " + x);
}
}
returnnew Inner();
}
}
匿名内部类
如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或者继承某个类),而且对象创建后,这个类的价值也就不存在了,这个类可以不必命名,称之为匿名内部类。
/*
* obj 用匿名类所实现的接口或所继承的父类类型声明的引用
* SuperType 匿名类所要实现的接口或继承的父类
*
*
*/
SuperTypeobj = new SuperType(…){
// 匿名中定义的成员变量或方法
… … …
};
定义匿名内部类
// 定义接口 Action,含有抽象方法 execute
interface Action{
publicabstractvoid execute();
}
publicclassMain {
publicstaticvoid main(String[] args) {
// 创建实现接口 Action 的匿名内部类对象
Actionaction= newAction() {
// 重写接口中的方法
@Override
publicvoid execute() {
System.out.println("匿名内部类");
}
};
// 调用匿名内部类对象的 execute 方法
action.execute();
}
}
匿名内部类面试题
//按照要求,补齐代码:要求在控制台输出 "HelloWorld"
interface Inter {
publicabstractvoid show();
}
class Outer1 {
// 补齐代码
publicstatic Inter method() {
returnnew Inter() {
@Override
publicvoid show() {
System.out.println("Hello World!!");
}
};
}
}
publicclassOuterDemo {
publicstaticvoid main(String[] args) {
// 类名.静态方法,方法调用链,另一个方法 show
// 要求方法返回的必须是对象
// method 返回的应该是一个对象,是接口 Inter 的实现类对象
Outer1.method().show();
}
}