private static int age; //静态的变量 类在内存中只有一个;如果想让多个实例同时能操作该变量则定义static 多线程! private double score; //非静态的变量 public void run(){ } //静态方法,同一个类里可以直接调用 //但是静态方法无法直接调用非静态方法,因为加载时还不存在 public static void eat(){ } public static void main(String[] args) { Student s1 = new Student(); Student.eat(); eat(); }
//2 { //代码块(匿名代码块) 程序在执行时无法主动调用,创建对象时自动创建,并且在构造器之前 System.out.println("匿名代码块"); } //1 static { //静态代码块 类创建的时候就执行,永久只执行一次 System.out.println("静态代码块"); } //3 public Person(){ System.out.println("构造方法"); } public static void main(String[] args) { Person person1 = new Person(); System.out.println("===================="); Person person2 = new Person(); //结果只有“匿名代码块”和“构造器”,因为 //静态代码块只执行一次 }
example:
import static java.lang.Math.random; import static java.lang.Math.PI; public class Test { public static void main(String[] args) { System.out.println(random()); System.out.println(PI); } }
abstract修饰符可以用来修饰方法也可以修饰类
抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
抽象类:不能使用new关键字来创建对象,它是用来让子类继承的
抽象发方法:只有方法的声明,没有方法的实现,它是用来让子类实现的
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类
例:
public interface UserService { //接口中的所有定义其实都是抽象的 public abstract void add(String name); void delete(String name); void update(String name); void query(String name); } public interface TimeService { void timer(); }
抽象类:extends
类 可以实现接口 implements 接口名
实现了接口的类,就需要重写接口中的方法
多继承~利用接口实现多继承
public class UserServiceImpl implements UserService, TimeService{ @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } @Override public void timer() { } }