static关键字
定义属性
static声明的属性和非static声明的属性最大的不同时保存的内存区域不同,static申明的属性保存在全局数据区
- static申明的属性可直接通过类.属性的形式访问
- 所有static对象属性必须参数实例化对象才可以访问,但是static对象就不需要了,无需实例化可以直接类.属性访问
class Book{
private String name;
private String price;
static String pub = "清华大学出版社";
}
public class TestStatic{
public static void main(String[] arg){
Book.pub="北京大学出版社";//static申明的属性可直接通过类.属性的形式访问无需实例化可以直接类.属性访问
System.out.println(Book.pub);//结果 北京大学出版社
}
}
定义方法
- static 方法不能够直接访问static属性和static方法,只能够调用static属性和方法
- 非static方法可以直接访问static属性和static方法,不受任何限制
class Book{
private String name;
private String price;
static String pub = "清华大学出版社";
public static String setPub(String tempPub){
return this.pub = tempPub;
}
}
public class TestStatic{
public static void main(String[] arg){
Book.setPub("北京大学出版社");//无需实例化对象,就可以调用方法
System.out.println(Book.pub);//结果 北京大学出版社
}
}
main方法,解析
- public 表示公共的
- static 表示方法时由类名称调用,不许实例化对象
- void void表示没有返回值
- main 系统规定好的名称,不能修改
- String[] arg 传入的参数
传入参数调用,多个参数用空格分隔开
java TestStatic hello hi hh
参数存在空格时,加双引号区分
java TestStatic ”hello word" "hi hh"
总结
- static属性和方法无需对象实例化就可以调用。但是一般都不用static定义属性
- java内存区分为: 栈内存(存堆内存地址),堆内存(存数据),全局数据区(存static属性),全局方法区(存static方法)