浅谈Static关键字
1.使用static关键字声明的属性为全局属性
未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beijing
package packageone;
class People{
String name;
String city = "Shanghai";
public People(String name) {
this.name = name;
}
public void showInfo() {
System.out.println("姓名:"+name+","+"城市:"+city);
}
}
public class StaticDemo { public static void main(String[] args) {
People p1 = new People("Tom");
p1.city = "Beijing";
p1.showInfo();
People p2 = new People("Jack");
p2.city = "Beijing";
p2.showInfo();
People p3 = new People("Mary");
//未声明p3对象的city属性为Beijing,则其city仍为Shanghai。
p3.showInfo();
}
}
使用static关键字指定city后,只需设置city = “Beijing”一次,即可实现三个人城市的更改
package packageone;
class People{
String name;
static String city = "Shanghai";
public People(String name) {
this.name = name;
}
public void showInfo() {
System.out.println("姓名:"+name+","+"城市:"+city);
}
}
public class StaticDemo { public static void main(String[] args) {
People p1 = new People("Tom");
p1.city = "Beijing";
p1.showInfo();
People p2 = new People("Jack");
p2.showInfo();
People p3 = new People("Mary");
//未声明p3对象的city属性为Beijing,但其city变为Beijing。
p3.showInfo();
}
}
2.使用static关键字声明的属性和方法可直接通过类名来调用(代码作为对该static应用的解释有点复杂了,同时是接口的简单使用)
package packageone;
interface USB {
void start();
void stop();
}
class C {
public static void work(USB u) {
u.start();
System.out.println("工作中");
u.stop();
}
}
class USBDisk implements USB {
@Override
public void start() {
System.out.println("U盘开始工作");
}
@Override
public void stop() {
System.out.println("U盘停止工作");
}
}
class Printer implements USB {
@Override
public void start() {
System.out.println("打印机开始工作");
}
@Override
public void stop() {
System.out.println("打印机停止工作");
}
}
public class interfacetest {
public static void main(String[] args) {
//直接通过类名来调用work方法
C.work(new USBDisk());
C.work(new Printer());
}
}
3.注意:】使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。而非static声明的方法是可以去调用static声明的属性或方法
package packageone;
//由于博主我水平有限参考了别人的代码案例,但由于他的代码有较大错误,经调试成功后援引,算是自己的代码了吧~嘿嘿
class People {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} // 使用static定义country属性
private static String country = "China"; // 定义static方法,修改static属性
public static void setCountry(String c) {
country = c;
} // 取得static属性
public static String getCountry() {
return country;
} // 通过构造方法为属性赋值(初始化操作)
public People(String name, int age) {
this.name = name;
this.age = age;
} public void info() {
System.out.println("姓名:"+ getName()+"年龄:"+getAge()+"城市:"+country);
}
} public class StaticDemo {
public static void main(String args[]) {
People per1 = new People("张三", 20);
People per2 = new People("李四", 21);
People per3 = new People("王五", 23);
System.out.println("--------- 修改前-----------");
per1.info();
per2.info();
per3.info();
System.out.println("--------- 修改后-----------");
// 直接使用类名称调用方法来修改static属性的内容,正是因为country为static全局变量,才不需要每个人都去修改国籍
People.setCountry("USA");
per1.info();
per2.info();
per3.info();
}
}
浅谈Static关键字的更多相关文章
- 浅谈static关键字的四种用法
1.修饰成员变量 在一个person类中,一个成员变量例如 String name,当new2个person()对象时候,这2个对象在堆的位置是不同的,给name赋值张三.李四,这两个对象的name是 ...
- 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...
- 浅谈static其一之不死变量
在学习汇编的过程中,小有所悟,遂把自己所思所想记下,以便日后查阅. 首先说说我对这个关键字的理解.static字面上就是静止的.静态的.不变的之类的意思,所以在被它修饰之后,应该也会带有这样的一些特点 ...
- 浅谈final关键字的用法
1.final变量: 常和static一起使用,修饰成员变量或者本地变量.修饰后为常量,不可以再次初始化(再次引用),例如public static final String SUCCESS= &qu ...
- 浅谈transient关键字
1,用途 当一个对象实现了Serilizable接口,这个对象就可以被序列化.而有时候我们可能要求:当对象被序列化时(写入字节序列到目标文件)时,有些属性需要序列化,而其他属性不需要被序列化,打个比方 ...
- 浅谈volatile关键字
volatile是一种轻量级的同步机制.它可以保证内存可见性以及防止指令重排序,但是不保证原子性 volatile和JMM机制是不可分割的,在谈volatile的时候有必要先了解以下JMM JMM(J ...
- 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
http://www.cnblogs.com/LoveJenny/archive/2011/07/05/2098578.html ExpandoObject:表示一个对象,该对象包含可在运行时动态添加 ...
- 浅谈 var 关键字
提起 var关键子,程序员的第一反应就是JavaScript, 事实上这个关键子在其他语言中也有被采用. 比如说C#, 比如说kotlin, 用法和JavaScript中使用差不多,作为要声明变量的前 ...
- 浅谈this关键字
在我学习this关键字的时候,通过查找资料总结出一些this的特殊用法, 供大家参考,代码里面有我总结的分析过程! 箭头函数里的this: var username = "全局"; ...
随机推荐
- C#文件安全管理解析
在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- bzoj3208--记忆化搜索
题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...
- 全网独家MongoDB Certified DBA Associate考试认证视频
该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...
- Express 教程 01 - 入门教程之经典的Hello World
目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...
- 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
- MySql中in和exists效率
mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的 ...