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
\
\
\