java静态成员和非静态成员的区别
static(静态)关键字
static关键字:
- 用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
使用注意
静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
static 特点
1.static是一个修饰符,用于修饰成员。
2.被static修饰的成员被所有的对象所共享
3.static优先于对象存在,因为static的成员随着类的加载就已经存在了。
4.static修饰的成员多了一种调用方式,就可以直接被类名所调用,格式:类名.静态成员
5.static修饰的数据是共享数据,对象中的存储的是特有数据
成员变量和静态变量的区别:
- 1.两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失而消失
- 2.调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用,还可以被类名调用
- 3.别名不同
成员变量也称为实例变量
静态变量称为类变量
- 4.数据存储位置不同
成员变量数据存储在堆内存的对象中,所以也叫对象特有数据
静态变量数据:存储在方法区(的静态区),所以也叫对象的共享数据
静态使用的注意事项:
1.静态方法只能访问静态成员。(非静态既可以访问静态,也可以访问非静态)
2.静态方法中不可以定义this或者super关键字(不能定义this是因为静态成员随着类的加载被加载进内存中)
3.主函数是静态的
代码实例:
public class Static {static int num = 4;String name;//成员变量static String country = "CN";//静态变量,类变量public void show(){System.out.println(Static.country+":"+this.name);//静态成员省略的是类名,成员变量省略的是this}public static void print(){System.out.println(num);}public static void main(String[] args) {Static s = new Static();s.name = "小强";s.country = "ss";s.show();System.out.println(Static.country);print();}
}
静态什么时候使用?
1.静态变量
当分析对象中所具备的成员变量的值都是相同的
这时这个这个成员就可以被静态修饰
只要数据在对象中都是不同的,那就是对象的特有数据,必须存储在对象中,是非静态的
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的
2.静态函数
函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。
简单说:该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的
如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,但是非静态需要被对象调用
而仅创建对象调用非静态的没有访问特有数据的方法该对象的创建是没有意义的,而且浪费内存
代码实例2
public class StaticUse {int age;String name;static String country = "China";public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}//无参构造器StaticUse(){}StaticUse (String name,int age){this.name = name;this.age = age;}public void speak(){System.out.println("我叫"+name+","+"我的国籍是:"+country+"我"+age+"岁了");}public static void printCountry(){System.out.println(country);}public static void main(String[] args) {StaticUse s = new StaticUse("小张",18);s.speak();StaticUse p = new StaticUse();p.printCountry();}
}
java静态成员和非静态成员的区别相关推荐
- java学习总结(16.06.07)类的静态成员和非静态成员
java里,类的成员可分为静态成员和非静态成员(实例成员),静态成员和非静态成员,从定义上来说就是有没有static修饰符修饰的区别.有static修饰的成员就是静态成员.如 public stati ...
- C++静态成员和非静态成员的区别 及修饰
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态 ...
- 静态成员与非静态成员的区别
一.静态成员的特点: (1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化; (2)static数据成员只能在类的外部进行初始化(特 ...
- 静态成员和非静态成员的区别
1.数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...
- C++静态成员和非静态成员的区别
1.数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...
- java静态类和非静态类的区别_Java中静态内部类和非静态内部类到底有什么区别?...
内部类(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.protected. ...
- 静态成员和非静态成员的区别是什么?
一.名称上的区别: 成员变量也叫实例变量:静态变量也叫类变量. 二.内存存储的区别: 成员变量存储到堆内存的对象中,静态变量存储到方法区的静态区中. 三.生命周期不同: 1)成员变量随着对象的出现而出 ...
- java静态方法和非静态方法的区别_史上最全阿里 Java 面试题总结
关注[ToBeTopJavaer],回复[答案],获取全套面试题答案,为明年的金三银四,做好充分的准备. JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗 ...
- java静态方法和非静态方法内存区别_static方法和非static方法的区别(java)
● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关 ...
最新文章
- iptables 常用规则使用实例
- JAVA基础知识之Set集合
- 2018python培训-2018传智播客Python基础班+就业班(15期)
- 在64位Windows 7 激活BitDefender Internet Security 2010
- 「POJ 1135」Domino Effect(dfs)
- 胶囊网络(Capsule Network)在文本分类中的探索
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误
- c语言省二历年真题讲解安徽,安徽省计算机等级二考试真题C语言年12月.doc
- Linux基础——操作系统框架
- C中的运算符优先级和结合性 *p++
- js <->java 时区处理
- MyBatis(五)------MyBatis配置
- 新建一个C#控制台应用程序
- Win10系统文件名太长导致无法删除
- 第33次Scrum会议(11/21)【欢迎来怼】
- 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))
- 测绘程序设计实习 CSU
- JS实现最美的3D宇宙效果
- ubuntu虚拟机迁移/移动/复制后无法上网
- Cisco路由器的安全配置方案
热门文章
- php mysql英文资料,Sams Teach Yourself PHP MySQL 英文CHM下载_PHP教程
- 超级机器人大战阿尔法php,超级机器人大战α流程攻略 机战Alpha外传分支多线路攻略(9)...
- 省市区三级行政区代码(包含港澳台)sql2
- 小米嵌入式工程师面试-心得
- 王道计算机组成原理第六章---总线总结
- 对人的外部评价与内部评价
- desktop不可用。如果该位置位于这台电脑上,请确保设备或驱动器已连接,或者光盘已插入。如果该位置位于网络上请确保已连接到网络或Internet,然后重试。如果仍然找不到该位置,则他可能已移动或删除
- 用C语言去判断一个字符串是否为回文字符串(简单明了)
- 什么是微信群控系统,我来告诉你!
- getsockopt套接口选项