面向对象关键字static

1    static是一个修饰符,用于修饰成员(成员变量和成员函数)。 2    当成员变量被static修饰后(静态成员变量/类变量),多了一种新的调用方式除了可以被对象调用外,还可以被类名调 =  类名.静态成员变量(方法)。
3    static的特点 
(1)随着类的加载而加载。(也就是说,它消失而消失,说明他的生命周期最长)
(2)优先于所有类二存在
(3)可以被所有类所共享
(4)可以直接被类名调用。
4  静态变量先存在,对象后存在

5   实例变量和类变量的区别:
    存放位置:
         类变量随着类的加载而存放在方法区中。
         实例变量随着对象的生成而存放在堆中。
 6   静态使用的注意事项:
 (1)静态方法只能访问静态成员。也不能使用 this,因为对象根本不存在。非静态方法竟可以访问静态页可以访问非晶态。
 (2)静态方法中不可以定义this 和super关键字。因为静态优先于对象而存在。
7   静态static有利有弊
利处:(1) 对对象的共享数据进行单独空间存储,节省空间,没有必要每个类都存一份。
             (2)可以直接被类名调用
弊:    (1)生命周期过长。
            (2)只能访问非静态成员。
8   重新认识主函数(主函数的定义)
/*
主函数是一个特殊函数,是程序的入口,可以被jvm所调用
主函数定义:
public 该函数访问权限最大
static 该函数随着类的加载就已经存在了
void   主函数无具体返回值
main   不是关键字,是一个特殊单词,但可以被虚拟机jvm识别。
(String [] aegs)函数的参数 参数是一个数组类型,该数组的元素是字符串,字符串类型的数组。
主函数格式是固定的,被jvm所识别。
主函数唯一可以修改的是args 是变量名
*/

class maindemo 
{
public static void main(String[] args) 
{
System.out.println(args);
System.out.println(args.length);  //jvm在调用主函数时传入的是一个String[0]
}
}

  9    那什么时候定义静态呢?‘
因为静态修饰变量和函数,要从两个方向入手
(1)什么时候定义静态变量?
        答:当对象中出现共享数据时,该数据被静态(static)所修饰。
(2)什么时候定义静态函数?
        答:  当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态static
 

——————————————————————————————————————————————

10     静态的应用:
静态应用的需求:
          由于java有多个类,需要使用共同的一个功能,即需要跨类使用一个功能,所以可以把所有功能封装在一个共同的类中,成为工具类, 这时候就可以把这个工具类的功能(函数)用static静态修饰。直接用类名调用各个功能。不需要产生对象,方便复用。

/**
静态代码块
格式:
static
{
静态代码块的执行语句。
}
特点:随着类的加载而执行,用于类的初始化,并优先于主函数执行。

*/
class Person
{
private Person(){}
private String name = "hah";
private int age;
private static  String country = "cn";
Person(String name,int age)
{
this.name = name;
this.age = age;
}
{
System.out.println(name+".."+age);
}
public void setName(String name)
{
this.name = name;
}

public void speak()
{
System.out.println(this.name+"..."+this.age);
}

public static void  showCountry()
{
System.out.println("country="+Person.country);
Person.method();
}
public static void method()
{
System.out.println("method run");
}

}

class  staticcode
{
public static void main(String[] args) 
{
Person p = new Person("zhangsan",20);
p.setName("lisi");
new Person();
}
}
/*
Person p = new Person("zhangsan",20);

该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值