static关键字
-
类属性:被static关键字修饰的变量属性,可以被当前类直接访问,即不用生成类实例再访问,而没有被static修饰的属性则必须先生成实例,再通过实例进行访问
public class Person{ private static int age;//类属性 private int num; Person.age;//直接通过类访问属性 Person per = new Person(); per.num }
-
类方法:与类属性类似,特别的,类内部被static修饰的方法,它们之间可以互相直接调用,不用生成实例甚至不用通过类调用
public void static go(){ } public void static run(){ go(); }
有一种特殊的静态方法,初始化类对象实例之后,该方法会被最先调用,且只调用一次!
//通常用于对属性进行初始化(先于构造方法被调用) { }//匿名代码块 //最先被调用 static{ }//静态代码块
-
静态导入包
import static java.lang.Math.random;//静态导入包 在方法中可以直接调用random,不用通过Math.random
补充:final
被final修饰的类无法被其他类继承!!!
抽象类
-
抽象类中的抽象方法只需要声明方法名称,不必要对方法进行实现
-
继承了抽象类的子类内部,必须给出父类中抽象方法的具体实现
public abstract class Action{ public abstract void doSomething();//声明抽象方法 } public class A extends Action{ public void doSomething(){ }//在抽象类的子类中给出抽象方法的具体实现 }
-
抽象类的特点:
- 无法new一个抽象类,只能靠子类去实现
- 抽象类中可以存在普通方法,但是抽象方法必须存在于抽象类中
- 抽象类也存在默认的构造方法
接口
-
普通类:只有具体实现
-
抽象类:可以有规范和实现
-
接口:只有规范,自己无法写方法实现,接口的本质是契约
-
接口中没有构造方法
-
定义的关键字:interface
-
实现接口的关键字:implements
- 实现了接口的类必须重写接口内的方法
- 接口可以实现多继承(普通的类只能实现单继承)
//接口的声明 public interface UserService{ void Add(); void Delete(); } publice interface TimeService{ void Run(); } //接口的具体实现 publice class UserServiceImpl implements UserService,TimeService{ void Add(){ } void Delete(){ } void Add(){ } }
-
接口中定义的方法都是public abstract
-
接口中定义的属性都是public static final(很少定义属性)
内部类
在类的内不定义其他的类,这些其他的类被称为内部类
-
成员内部类
-
静态内部类
与成员内部类相似,只是加上一个static修饰词,加上之后,在内部类里面无法获取、访问或者修改外部类的属性(原因:static修饰的东西都是随着类创建而创建的,静态内部类先于外部类的属性被创建)
一个class文件里面只能有一个public的类,但是在文件里面可以允许存在其他类,一般这些类可以用于测试
-
局部内部类
在外部类的方法里面定义
public class Outer { public void method(){ //局部内部类 class inner{ } } }
-
匿名内部类
在声明类的实例的时候不用把他赋给一个变量
public class Test{ new Apple().eat(); //没有名字初始化一个类,不用将实例保存到变量中 } class Apple{ public void eat(){ System.out.println("hahha"); } }