JAVA-4-Static笔记
来源:互联网 发布:上海php培训机构 编辑:程序博客网 时间:2024/06/08 18:51
1.static 的特点
1.static是一个修饰符,用于修饰成员。2.static修饰的成员被所有的对象所共享。3.static优先于对象存在,因为static的成员随着类的加载就已经存在了。4.static修饰的成员多了一种调用方式,可以直接被类名所调用,类名.静态成员。5.static修饰的数据是共享数据,对象中存在的数据是特有数据。
2.成员变量和静态变量的区别?
1.两个变量的生命周期不同。 成员变量随着对象的创建而存在,随着对象的回收而被释放。 静态变量随着类的加载而存在,随着类的消失而消失。2.调用方式不同。 成员变量只能被对象调用。 静态变量可以被对象调用,还可以被类名调用。3.别名不同。 成员变量也称为实例变量。 静态变量称为类变量。4.数据存储位置不同。 成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫做对象的共享数据。
3.静态使用的注意事项
1.静态方法只能访问静态成员(包含方法和成员)。(非静态可以访问非静态,又可以访问静态)2.静态方法中不可以使用this或者super关键字。3.主函数是静态的。
class Person{ String name;//实例变量,成员变量 static String country = "CN";//类变量 public void show() { System.out.println(Person.country+":"+this.name); }}class staticDemo{ int num = 4; public static void main(String[] args) { String country = Person.country;//直接利用类名调用类中的静态变量,静态变量比对象先存在 System.out.println(country); new staticDemo().show();//要在静态方法中调用非静态方法必须要有对象 } public void show() { System.out.println(num); }}
4.静态什么时候用?
1.静态变量。 当分析对象中所具备的成员变量的值都是相同的(即变量的值是共性的)。这时这个成员就可以被静态修饰。 只要数据在对象中都是不同的(即特性),就是对象的特有数据,必须存储在对象中,是非静态的。 如果是相同的数据(是共性),对象不需要修改,只需使用即可,不需要存储在对象中,定义为静态的。 2.静态函数 函数是否用静态修饰,就参考一点,就是该函数功能是否访问到对象中的特有数据。 简单的说,从源代码看,该功能是否需要访问非静态成员变量,如果需要,该功能是非静态的。 如果不需要,就可以将该功能定义成静态的,当然也可以定义成非静态的,但是非静态需要被对象调用,而仅创建对象调用非静态的没有访问特有数据的方法,该对象的创建是没有意义的,而且还浪费了堆内存。
5.有关静态执行过程的演示
class Person//定义一个Person的类{ private static String country = "CN"; private String name; private int age; Person(String name, int age)//构造函数对对象变量初始化 { this.name = name; this.age = age; } void show()//定义了一个非静态的方法 { System.out.println(Person.country+":"+this.name+":"+this.age); } static void method()//定义了一个静态的方法 { System.out.println(Person.country); }}class staticDemo2{ public static void main(String[] args) { Person.method();//调用类的静态方法 Person p = new Person("Java",20);//建立一个Person类的对象 p.show();//调用对象的show方法 }}
程序运行的过程;
1.首先找到含有主函数的类,把staticDemo2类加载到方法区(共享数据区)内,public static void main(String[] args)存放在静态方法区内。main()函数进栈区。2.执行Person.method()这一句;首先jvm会把Person类加载到方法区内(共享数据区),其中Person(String name, int age){代码}放在非静态方法区内,void show(){代码}放在非静态方法区内,static void method(){代码}放在静态区内,类变量country也会放在静态区内。jvm会从静态区中找到method(),method()进栈区执行System.out.println(Person.country),从静态区内找到类变量(也是静态变量)country,打印。出栈3.执行Person p = new Person("Java",20),首先在堆区放入age,name成员变量,然后Person()构造函数进栈区,在栈区创建局部变量age=20,name = "Java",然后找到调用Person()的对象,把局部变量的值赋给堆区的相应的变量。出栈。最后p指向对象实体。4.执行p.show(),在对象p中找到show()方法,然后show()入栈,执行打印操做(从静态方法区找到country,在p对象的堆区找到age和name输出),出栈5.main执行完毕出栈。各区中的变量和方法也被释放。
6.主函数的分析
public static void main(String[] args)主函数的特殊之处:1.格式是固定的2.被jvm所识别和调用public:因为权限必须最大;static;不需要对象的,直接用主函数所属类名调用即可void;主函数没有具体的返回值main;函数名,不是关键字,只是一个jvm识别的固定名字String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型的。*/class MainDemo{ public static void main(String[] args)//JVM往主函数里面传的是一个 new String[0]; { System.out.println(args);//[Ljava.lang.String;@555590 System.out.println(args.length); for(int i = 0; i<args.length; i++) System.out.println(args[i]);}
阅读全文
0 0
- JAVA-4-Static笔记
- Java学习笔记:static
- java static笔记
- java笔记之static
- java笔记 static关键字详解
- java自学笔记之static
- Java笔记深解---static
- Java学习笔记----static关键字
- Java学习笔记--static关键字
- JAVA笔记-Static与Final详解笔记
- Java学习笔记之Final(Static)变量
- static修饰符- Core Java 学习笔记
- 笔记: static 在 java中的作用
- Java笔记(四) this和static
- Java笔记——关于static
- java学习笔记 static,final关键字学习
- java笔记之final和static关键字
- Java学习笔记(六)static关键字
- 连续第十一天总结
- linux如何快速安装svn服务器?
- Machine Learning 学习之神经网络(1)
- [进击吧shader]初识shader
- 各种音视频编解码学习详解
- JAVA-4-Static笔记
- 软考嵌入式系统设计师2010年上午试题总结
- crontab 执行定时任务如何控制前一个任务执行完后再启动下一个任务?
- LeetCode-448. Find All Numbers Disappeared in an Array
- 会话追踪技术及状态跟踪,持久化的状态
- Android Studio 离线开发(offline)
- Color conversions
- 51nod 1445:变色DNA(最短路变形)
- java初始篇