static关键字
概念
特点
- 可以用来修饰成员变量与方法,被static修饰的资源称作静态资源
- 静态资源随着类的加载而加载,优先于对象进行加载
- 静态在原可以被类名直接调用,没有创建对象也可以调用
- 静态资源被全局所有对象共享,只有一份
示例
```java package cn.tedu.oopstatic;
/**
- 用于练习static的入门案例 */
public class TestStatic { public static void main(String[] args) { / 使用类名可以直接调用静态资源 静态资源优先于对象进行加载的,随着类的加载而加载 比对象先加载进入内存,所以可以不同过对象直接使用类名调用静态资源 静态资源被全局所有对象共享,只有一份 / System.out.println(Student.name); Student.study();
Student s = new Student();s.name = "埼玉";s.sno = 2015;System.out.println(s.name);System.out.println(s.sno);Student s1 = new Student();System.out.println(s1.name);System.out.println(s1.sno);s1.name = "杰诺斯";System.out.println(s.name);System.out.println(s1.name);/*s.study();System.out.println(s.name);*/}
}
class Student{
/*static:静态可以把普通资源修饰为静态资源*/static String name;//将普通成员变量修饰为静态成员变量int sno;int age;String gender;//将普通方法修饰为静态普通方法,一般写在修饰符之后public static void study(){System.out.println("每天至少保证24小时充足的学习时间");}public void speak(){System.out.println("会就会,为什么要说");}
}
<a name="VfAs5"></a>## 注意<a name="jQsky"></a>### 静态的调用关系1. _非静态资源可以调用静态资源_1. _静态资源可以调用静态资源_1. _静态资源不可以调用非静态资源_<a name="pYt9H"></a># 代码块<a name="wWREN"></a>## 静态代码块_位置:类里方法外<br />执行时机:静态代码块也属于类资源,随着类的加载而加载,优先于对象先加载,只加载一次,创建多个对象也只执行一次<br />作用:用于加载一些需要第一时间进行加载的且只加载一次的资源,一般用于项目的初始化_<a name="QUcbP"></a>## 构造代码块_位置:类里方法外_<br />_执行时机:创建对象时被处罚,优先于构造方法执行,创建几个对象就加载几次_<br />_作用:用于提取所有构造方法的共性功能_<a name="IbdgG"></a>## 局部代码块_位置:方法里_<br />_执行实际:调用本代码块所处的方法时才会执行_<br />_作用:用于限制变量作用范围,作用范围越小越好_<a name="tFCIN"></a>## 执行顺序静态代码块->构造代码块->构造方法(创建对象时调用)->局部代码块<a name="fPPSF"></a># final<a name="VkDuG"></a>## 概念1. 是java提供的一个关键字1. final是最终的意思1. final可以修饰类,方法,成员变量初衷:java出现继承后,子类可以更改父类的功能,当父类功能不许子类改变时,可以利用final关键字修饰父类。<a name="i9Gsz"></a>## 特点1. 被final修饰的类,被修饰的类为最终类,不能被继承1. 被final修饰的方法,被修饰的方法为最终方法,不能被重写1. 被final修饰的变量是个常量,常量值不能被改变1. 常量的定义形式:final 数据类型 常量名 = 值,常量必须要初始化即赋值;<a name="s2pME"></a>## 示例```javapackage cn.tedu.oop;/*** 用于final入门案例*/public class TestFinal {public static void main(String[] args) {Father f = new Father();Son s = new Son();f.rain();s.rain("长安");}}/*final可以用来修饰类,被修饰的类不可以被继承,被修饰的类没有子类,代表自己就是最终类final class Father{}会报错,子类不能继承一个final的父类*/class Father{/*使用final修饰常量final修饰的不是变量,而是常量,常量的值不可以被修改,所以在定义时必须给常量赋值否则会报错*/final String name = "西安";/*使用final修饰符类的方法final可以修饰父类的方法被final修饰的方法,表示方法的最终实现,不可被重写*/final public void rain(){//name = "洛阳";报错,常量的值不可以被修改System.out.println(name + "的");System.out.println("狂风暴雨");}}class Son extends Father{public void rain(String a){System.out.println(a + "惠风和畅,天朗气清");}}
