目录
一、static关键字
使用格式
static 数据类型 变量名;
static String name;
知识要点
1.可以被类名直接调用
2.被static修饰的变量(属性),全局共享
1.可以被类名直接调用
public class student {
/*
*可以被类名直接调用
* */
//声明静态成员变量
static String name;
public static void main(String[] args) {
student.name="java";
System.out.println("student.name:"+student.name);//输出 student.name:java
}
}
2.被static修饰的变量(属性),全局共享
public class student1 {
/*
*
* 被static修饰的变量(属性),全局共享
* */
//声明静态成员变量
static String name;
public static void main(String[] args) {
//创建对象
student1 student=new student1();
student.name="java";
System.out.println("student.name:"+student.name);//student.name:java
student1 student1=new student1();
//被static修饰的变量(属性),全局共享
System.out.println("student1.name被static修饰的变量(属性),全局共享:"+student1.name);//student1.name:java
}
}
二、静态方法
使用格式
访问修饰符 static 返回值 方法名称(){
}
public static void study(){
}
知识要点
1.可以被类名直接调用
2.静态方法只允许去访问静态方法,不允许去访问非静态成员(非对象条件下)
1.可以被类名直接调用
public class student2 {
/*
*静态方法可以被类名直接调用
* */
//静态方法
public static void study(){
System.out.println("我爱学习");
}
public static void main(String[] args) {
student2.study();
}
}
2.静态方法只允许去访问静态方法,不允许去访问非静态成员(非对象条件下)
public class student4 {
/*
* 静态方法只允许去访问静态方法,不允许去访问非静态成员(非对象条件下)
* */
//String name;
static String name;
public static void study(){
System.out.println("我爱学习java");
}
public void studyer(){
System.out.println("wo");
}
public static void main(String[] args) {
//student4.name="java";不可以对其进行赋值
student4.name="java";
student4.study();//输出 我爱学习java
student4 stu=new student4();
stu.studyer(); //输出 wo
//错误静态方法不允许去访问非静态方法,除非对象
}
}
三、静态块
使用格式
static{
//执行语句
}
知识要点
随着类的加载而执行且只能执行一次
1.随着类的加载而执行且只能执行一次
public class student5 {
/*
* 随着类的加载而执行且只能执行一次
* */
//静态方法
static{
System.out.println("我是静态方法");
}
public static void main(String[] args) {
student5 stu=new student5();//类执行第一次
//输出 我是静态方法
student5 stu1=new student5();//类执行第二次
//没有输出
}
}
四、 匿名块
{ }
//匿名块
{
System.out.println("我是匿名块");
}
五、构造块(构造方法)
public 类名(){
}
六、比较静态块,匿名块,构造块的先后
public class student6 {
//静态块
static{
System.out.println("我是静态块");
}
//匿名块
{
System.out.println("我是匿名块");
}
//构造块
public student6(){
System.out.println("我是构造块");
}
public static void main(String[] args) {
student6 stu =new student6();
/*输出顺序:
* 我是静态块
我是匿名块
我是构造块
*
* */
}
}
八、总结
静态属性可以被类名直接调用
被static修饰的变量(属性),全局共享
可以被类名直接调用
静态方法只允许去访问静态方法,不允许去访问非静态成员(非对象条件下)
静态块随着类的加载而执行且只能执行一次
按照先后顺序随着类的加载 静态块>匿名块>构造块