局部变量和成员变量
局部变量是定义在方法中的变量,只能在方法中使用
成员变量是定义在类中的变量,在类中使用
java会给成员变量一个初始值,但不会给局部变量初始值
如果成员变量变量名与局部变量变量名同名了,则在此方法中优先使用局部变量
static
java中被static修饰的成员被称为静态成员或类成员,它是属于整个类的,为类的所有对象所共有
static可以修饰变量、方法和代码块
静态变量可以直接用类名调用,如果在同一个类中可以直接调用
静态方法中可以直接调用静态变量,不能调用非静态变量(要用对象来调用)
静态方法中不能定义静态变量和调用this、super关键字,因为this、super是针对对象的,但是静态方法属于类,方法中定义的是局部变量,所以静态方法中不允许定义静态变量(静态变量是全局变量)
static修饰的成员只会在类加载时创建一次(初始化),调用static成员时也会加载类
static修饰的成员会被子类继承,子类会隐藏这个成员,但子类不能覆盖它
构造方法隐式的被指定为static
构造方法
new关键字:
new运算符通过给这个对象分配内存并返回一个指向对象的引用
new+构造方法 来初始化类
构造方法无返回值
如果你没有定义构造方法,系统会默认的构造一个无参的构造方法
初始化块
初始化块是用来初始化类的,给所有的对象初始化,构造函数只给相对应的对象初始化,初始化块在对象一建立就会运行,且优先于构造函数
静态初始化块只能给静态变量赋值,不能给普通变量赋值
静态初始化块最先执行(只在类加载时执行,并且只执行一次),然后是初始化块,最后才是构造函数
内部类
内部类就是定义在另外一个类中的类,包含内部类的类被称为外部类
内部类的方法可以直接访问外部类的所有数据(包括私有的)
内部类有以下几种:成员内部类,方法内部类,静态内部类,匿名内部类
1.成员内部类
成员内部类能直接使用(或者使用外部类.this.对象来调用)外部类的所有数据而不受访问控制符的影响
定义了成员内部类后必须使用外部类的对象来new一个内部类的对象
外部类不能直接使用内部类的成员变量和方法
public void Testing {
public static void main(String[] args) {
Outter o = new Outter();
Outter.Inner i = o.new Inner();
}
}
class Outter {
class Inner { }
}
2.静态内部类
静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问
创建静态内部类的对象时可以不需要外部类的对象,直接创建
如果外部类的静态成员与内部类的静态成员名字相同,可以通过类名直接访问外部类的静态成员,若不同,则可以直接调用
3.方法内部类
方法内部类就是定义在外部类的方法中,只在该方法中使用,不能使用访问控制符和static修饰符
4.匿名内部类
匿名内部类是不能有名称的类,所以没办法引用他们,必须在创建时,作为new语句的一部分来声明他们
如:Outter o = new Outter() {
//匿名内部类
}
访问修饰符
访问修饰符有四种:private 默认 protected public
private是私有的,只能在当前类中使用
不能在方法体内部使用private,因为private修饰的变量属于全局变量
默认 可以在当前类和同一包中的类中使用
protected 可以在当前类和同一包中的类以及子类中使用
public 可以被所有类访问
final关键字
final可以修饰类、方法、属性和变量
修饰类的时候,该类不能被继承,final 类的所有成员和方法都会隐式的被指定为final成员或方法
修饰方法,则该方法不能能被覆盖,类的private方法会隐式的被指定为final方法
修饰属性,则该属性不会隐性的初始化
修饰变量,该变量就成了常量,当final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
equal 和 ==
基本数据类型之间的比较应该用==,比较的是他们的值。引用数据类型用==比较的时候,比较的是他们再内存中的地址