六static
来源:互联网 发布:健康医疗大数据应用 编辑:程序博客网 时间:2024/05/16 01:30
3.6static静态关键字
用法1,是一个修饰符,用于修饰成员(成员变量和成员函数),被修饰之后的成员,就会被从栈内存中拿出来,但是大家还可以访问,节省了内存
2 当成员被静态修饰后就多了一种调用方式,除了被对象调用外,还可以直接被类调用。用法:类名.静态成员
eg:System.out.printlin(Person.country);//这里边的Person就是一个类,而country是一个被static修饰过的成员变量()国籍
那为什么不是所有的成员都用static修饰呢,那不是更好吗。因为static修饰的成员必须是共享的,就是大家都有的共同点,比如说每个对象都是一个国籍,就是Chain
,大家的名字都是不一样的,就不能用static修饰,就像每个学生都可以有自己的电脑一样,还用每个人都准备一台饮水机吗,不用,因为饮水机就是共享的,就可以用static修饰
被静态修饰过的成员从栈内存中拿了出来,但是也不再堆内存中,去了方法区(共享区)数据区。
//类中的共享数据和方法都在共享区。
static的特点
1,随着类的加载而加载。随着类的消失而消失(生命周期最长)//就是类在内存中开辟了一个空间,那么被static所修饰的成员就会诞生。
2优先于对象存在//因为是随着类加载而加载的,在对象没诞生的时候就有他了
3,被所有对象所共享
4,可以被类直接调用
*/
class Person
{
String name://成员变量,也叫实力变量
static String country ="CN";//静态变量,也叫类变量,一看到是被static修饰就要想到他的
//几个特点,共享,可以直接被类调用,随着类加载
public void show()
{
System.out.println(name+";;;"+country);
}
}
/*
类变量和实例变量的区别:
1存放位置,类变量随着类的加载而存在共享区中
实例变量对随着对象的建立而存在于堆中
2生命周期:类变量生命周期长,随着类的消失而消失
实例变量生命周期随着对象消失而消失。
静态的使用注意事项:
1.静态方法只能访问静态的成员//y因为静态成员是随着类的产生而产生,他如果访问非静态成员,那些非静态成员还没创建呢啊,别忘了,静态成员可以直接被类调用,而不用创建对象,eg:Person.show();
但是非静态方法可以访问静态成员,因为静态先在了,而且静态的都是共享的,
2.静态方法中不可以用this,super关键字修饰,因为静态方法,优先于对象存在,this代表对象,那时候还没对象呢。你this代表什么去?所以静态方法不可以用this。
3,主函数是静态的。
静态有利有弊,
利:对对象的共享数据进行单独空间的存贮,节省内存,没有必要每个对象中都存储一份,
可以直接被类名调用。
弊:生命周期过长,不能释放内存,
访问出现局限性,静态只能访问静态。
————————————————————————————————————————————————————————————
/*
public static void main (Steing[] args)
主函数,是一个特殊的函数,作为程序的入口,被jvm调用
public:代表着该函数的访问权限是最大的
static:代表着主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
函数的参数:(String[] arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串,也就是字符串类型的数组
主函数是固定格式的,jvm识别。
但是唯一可以改变的的是args,他是个变量名,你换成arr都行(随口说一下,args是arguments的缩写)
jvm在调用主函数的时候,传入的是new String[0];
*/
使用静态,从两方面下手
因为静态修饰的内容有成员变量和函数
什么时候定义静态的变量呢?
当对象中出现了共享数据时,该数据被静态所修饰,对象中特有的数绝被定义成非静态的,
name每个人都有,那是属性,不是共享数据,是对象特有数据,
共享数据时每个人都有的,都是一样的
什么时候定义静态的函数呢?
当功能内部没有访问到静态数据(对象独有数据),那么该功能可以定义为静态的。
/*
静态的应用
每个程序中都用共性的功能,可以将这些功能抽取,独立封装,以便服用。
*/
——————————————————————————
别人给你个封装工具类,你怎么用啊,你都不知道里边有什么功能,所以需要说明书啊
java程序的说明书,开始用文档注释来完成:
/**
这是一个可以对数组进行操作的工具类,该类提供了,获取最大值,排序等
@author 张三
@version v1.1(版本号)
*/
文档注释只能注释public和protect修饰的的方法,因为别的权限不够大,private和默认修饰符都不会被生成帮助说明书
——————————————————————————————————————————————————————————
静态代码块
格式:
static
{
静态代码块中的执行语句;
}
特点:随着类的加载而加载,只执行一次。优先于主函数、
作用:给类初始化的
——————————————————————————————————————————————————————————
Person p =new Person("zhangsan",20);
这句话都做了什么事?
1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
2.执行该类中的静态代码块,如果有的话,给person.class类进行初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对属性进行显示初始化。
6.对对象进行构造代码块初始化,
7.对对象进行相应的构造函数初始化。
8.将内存地址付给内存中p的变量。
设计模式:解决某一类问题行之有效的方法,java中有23中
单例设计模式:解决一个类在内存中只存在一个对象。
- 六static
- 【Java进阶六】static关键字
- Objective-C static关键字(六)
- java提高篇(六)-----关键字static
- java提高篇(六)-----关键字static
- Java学习笔记(六)static关键字
- java提高篇(六)-----关键字static
- Java关键字(六)final与static
- java提高篇(六)-----关键字static
- JAVA基础知识点梳理六:static相关
- 第三课C++--之六 static
- Java面向对象笔记(六)static关键字
- java提高篇(六)-----关键字static
- 【六】Java中关于static的使用
- Objective-C研究院之static关键字(六)
- 黑马程序员_六 【final】【static】【内部类】【main】
- Java基础知识整理(六)-final和static
- Objective-C研究之static关键字学习(六)
- 面向对象
- 解析Java中静态变量与实例变量的区别
- 正则表达式
- AJAX的应用优势
- Ajax初学
- 六static
- 2011-9-26 20:27:06
- 从汇编的眼光看C++(之delete内存泄露)
- VC++ CTime类,CTime 与 CString转换
- linux下fork一道面试题目
- 《30天精通iPhone手机编程》-Day5-文字长度
- 程序员收入报告
- 同步交互异步交互
- C#未完成----串口通信