Day27
static关键字详解
静态属性
package com.oop.demo07;
public class Student {
private static int age;
private double score;
public static void main(String[] args) {
Student s1 = new Student;
System.out.println(Student.age);
System.out.println(Student.score);
//通过对象调用里面的方法和字段
System.out.println(s1.score);
System.out.println(s1.age);
}
}
静态方法
对于非静态方法的调用是:对象点方法
package com.oop.demo07;
public class Student {
private static int age;
private double score;
public void run(){
}
public static void go(){
}
public static void main(String[] args) {
new Student().run();
}
}
非静态方法调用两种方式:
package com.oop.demo07;
public class Student {
private static int age;
private double score;
public void run(){
}
public static void go(){
}
public static void main(String[] args) {
Student.go();
//go();
}
}
1.Student.go();
2.go();
非静态方法可以调用静态方法里面的所有东西,静态方法可以调用静态方法的,但是不能调用非静态方法的。
原因是:静态方法和类一起加载,加载之前就没有非静态方法。
package com.oop.demo07;
public class Person {
{
//代码块(匿名代码块)
System.out.println("匿名代码块");
}
static {
//静态代码块
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person = new Person();
}
}
static只执行一次,匿名代码块作用:赋初始值
package com.oop.demo07;
public class Person {
{
//作用:赋初始值
//代码块(匿名代码块)
System.out.println("匿名代码块");
}
//static只执行一次
static {
//静态代码块
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("===========");
Person person2 = new Person();
}
}
调用随机数
package com.oop.demo07;
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());
}
}
package com.oop.demo07;
//静态导入包
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);
}
}
final之后断子绝孙
抽象类
package com.oop.demo08;
//abstract 抽象类
public abstract class Action {
//约束,有人帮我们实现
//abstract,抽象方法,只有方法的名字,没有方法的实现
public abstract void doSomething();
}
改变的方法:
package com.oop.demo08;
//抽象类的所有方法,继承了它的方法,都必须要实现它的方法,除非子类也是抽象的,
public class A extends Action{
@Override
public void doSomething() {
}
}
抽象类的特点:
- 不能new这个抽象类,只能靠子类去实现它:约束
- 抽象类中可以实现普通方法
- 抽象方法必须在抽象类中