static的使用

132 阅读2分钟

static的引用带来的方便用过类可以直接调用方法,而不是需要创建对象再来调用方法,也可以直接调用了类中的变量。

例如:

class Person
{
private int age;
private String name;
Person(int age,String name)
this.age=age;
this.name=name;
void speak(){
System.out.println(“hahah”);
}
static void sleep(){
System.out.println(“heheh”);
}
}
class PersonDemo{
public static void main(String args[]){
System.out.pritln(Person.speak());
}
}

static也可以修饰静态变量

class A{
private doble r;//定义半径
static private double pi=3.14;//pi是不变的值,定义成全局变量的值
A(double r){
this.r=r;
}
void gerarea(double r){//获取面积
return  r*r*pi
}
}
class ADemo{
public static void main(	String args[]){
System.out.printn(new A(3).gerarea());
}
}

\

如果pi这个变量没有被静态修饰的话,当创建A对象时,每个对象中都会有pi这个变量,但是pi是个固定不变的值,没有必要每个对象中拥有,这时可以将这个变量静态修饰,让所有对象共享就可以了。

静态加内存图解:

public class Person 
{
	//人的姓名
	private String name;
	//所有对象都具有国籍属性,并且都会CN,这时可以将这个成员变量定义成静态的
	private static String country = "CN";
	Person(String name)
	{
		this.name = name;
	}
	void showName()
	{
		System.out.println("name="+name);
	}
	//静态方法
	static void showCountry()
	{
		System.out.println("Country="+country);
	}
}
class StaticDemo
{
	public static void main(String[] args)
	{
		Person p = new Person("传智");
		p.showName();
		//showCountry是静态方法,类名直接调用
		Person.showCountry();

静态代码块:

class person{

    private int age;
private String name;
person(int age,String name){
this.age=age;
this.name=name;
}
static{   //静态代码块
System.out.println(“wahhah”);
}
}

对象创建的过程:

class Demo
{
	static int x = 1; //静态成员变量
	int y = 1;	 //非静态成员变量
	static  //静态代码块
	{
		System.out.println("static code...x="+x);
	}
	{//构造代码块
		System.out.println("cons code ...y="+y);
	}
	Demo() //构造函数
	{
		System.out.println("cons function ...y="+y);
	}
}
class CreateObjectTest
{
	public static void main(String[] args) 
	{
		Demo d = new Demo();  //创建Demo对象
	}

对象加载的流程总结:

1、加载Demo.class文件进方法区,并进行空间分配。

2、如果有静态变量,先默认初始化,显示初始化。

3、如果有静态代码块,要执行,仅一次。

4、通过new在堆内存中开辟空间,并明确首地址。

5、对对象中的属性进行默认初始化。

6、调用对应的构造函数进行初始化。

7、构造函数内部。

7.1 调用父类构造函数super();

7.2 成员变量的显示初始化。

7.3 构造代码块初始化。

7.4 构造函数内容自定义内容初始化。

8、对象初始化完毕后,将地址赋值给d引用变量。

\

楼主QQ: 496056171



\

\




\