刷题笔记(持续更新)

内部类

1.成员内部类:最普通的内部类,定义为位于另一个类的内部

2.局部内部类:定义在一个方法或一个作用域里面的类,它与成员内部类的区别在于局部内部类的访问权限仅限于方法内或者该作用域内

3.匿名内部类:没有构造器的类,如各种监听事件就用到了匿名内部类

4.静态内部类:也是定义在另一个类里面的类,只不过在类的前面多了一个static关键字刷题笔记(持续更新)

 

 

类的加载顺序

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的

 

public class ExtendsTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        C c = new  D();
    }

}
class C {
    static 
    {
        System.out.println("C 基类静态域 ");
    }
    {
        System.out.println("C 基类对象成员构造函数");
    }
    public C(){
        System.out.println("C 基类本身的构造函数");
    }
}
class D extends C{
    static 
    {
        System.out.println("D 派生类静态域");
    }
    {
        System.out.println("D 派生类对象成员构造函数");
    }
    public D(){
        System.out.println("D 派生类本身的构造函数");
    }
}
运行结果:
C 基类静态域 
D 派生类静态域
C 基类对象成员构造函数
C 基类本身的构造函数
D 派生类对象成员构造函数
D 派生类本身的构造函数

try-catch语句

 

如果try语句里有return,那么代码的行为如下: 
1.如果有返回值,就把返回值保存到局部变量中
2.执行jsr指令跳到finally语句里执行
3.执行完finally语句后,返回之前保存在局部变量表里的值
如果try,finally语句里均有return,忽略try的return,而使用finally的return

形式参数的修饰符

 

对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误 。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。   

一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。

x++和++x

刷题笔记(持续更新)

在静态代码块内执行后
static{
   intx=5;
}
这个局部x变量就已销毁,类变量x,y会伴随着程序中的自增自减操作影响自身的值,它们会有初始化值0,
而只要清楚x++和++x的区别就行了,前者是先运算后赋值,后者是先赋值后运算。

在程序中x--;之后x=-1,调用方法myMethod( );时,y=x++ + ++x;相当于y=-1+1,所以y=0,这个地方的第一个x++
在参与运算的时候是没有赋值的,所以为-1,第二个++x的时候在先执行++操作前要注意此时x实际为0,因为前面的x++
改变了x自身的值,所以++x后为1.在后面的运算中x+y+ ++x,根据规则相当于:1+0+2=3 因为此时的++x在后面,所以第一个x的值没有改变。

访问权限修饰符

刷题笔记(持续更新)

( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。
( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。
( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

方法的重写与重载

方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型

方法的重写(override)两同两小一大原则

方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

 

方法传参

刷题笔记(持续更新)

以画图说明该问题,往方法中传参,传的仅仅只是地址,而不是实际内存,所以不要以为y=x程序的执行,是 b=a的执行。这两者是不相等的

刷题笔记(持续更新)