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>
## 示例
```java
package 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 + "惠风和畅,天朗气清");
}
}