1.6(java学习笔记)static关键字
static关键字
1.static修饰变量也称静态变量,静态变量存放在静态区被该类的所有对象共享。
例如,定义了一个类class User{static Sring city = "a城"},将类中的一个city属性定义为静态变量。我们创建一个对象use1,然后可以通过user1.city = "b城"修改静态区里面User类的信息。User类中city的初始值就发生了改变,变成了b城。我们再新建一个对象use2,打印user2,会发现user2.city变成了b城。
(结合之前讲的内存分析说的,静态区中存放类信息,静态变量等,静态区只有一个,被所有线程共享);
如果没有加static的变量,称为非静态变量,非静态变量只属于对象,每个对象有每个对象的非静态变量。修改非静态变量只会改变单个对象的值,并不会改变类类中的信息。
以下列代码为例:
public class TestStatic {
public static void main(String[] args){
User a1 = new User();
a1.Info();
a1.city = "b城"; //city为静态变量,修改后存放在静态区的User类中city的信息也被修改了。
a1.Info(); //此时类中city的值时“b城”
User a2 = new User(); //新建一个对象,输出city我们会发现输出的b城
a2.Info(); //说明类中的信息已经被修改,而静态变量被所有对象共享。
//如果city没有static修饰,那么修改a1.city修改的只是属于a1的非静态变量,
} //并不会改变类中的信息,新建a2输出a2还是a城(city非static修饰时)。
}
class User{
static String city = "a城"; //修改后就相当于static String city = “b城”;
void Info(){
System.out.println(city);
}
}
输出结果:
a城
b城
b城
2.static修饰方法,最主要的目的是可以不用创建对象直接通过类来引用方法,也称类方法可通过类名直接调用。
public class TestStatic {
public static void main(String[] args){
User.Info(); //没有创建对象,但可以通过类名直接调用方法。
}
}
class User{
static String city = "a城";
static void Info(){
System.out.println(city);
}
}
输出结果:
a城
但有一点需要注意,静态方法中不能调用非静态方法、属性,但非静态方法中可以调用静态方法、属性。
class User{
String name;
static String city = "a城";
static void Info(){
System.out.println(city);
name = "123"; //静态方法中调用了非静态变量或方法是不行的,在name前面加上static就可以了。
} //即静态方法中可以调用静态方法和属性。
}
class User{
static String name;
static String city = "a城";
void Info(){
System.out.println(city);
name = "123"; //非静态方法中可以调用静态方法和属性。
}
}
1.6(java学习笔记)static关键字的更多相关文章
- Java学习笔记——static关键字与静态的使用方法
static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ...
- Java学习笔记18---final关键字修饰变量、方法及类
英语里final这个单词大家都知道是"最终的"意思,其实还有一个意思是"不可更改的".在Java里,final关键字作"不可更改的"来解释更 ...
- java学习笔记11-static关键字
如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...
- Java学习:static 关键字概述
static 关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己.而是属于类的,所以凡是本类的对象,都共享同一份. 如果没有static关键字,那么必须首先创建对象,然后通过对象才 ...
- 【Java学习笔记之十五】Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- Java学习笔记之---static
Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性 静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
随机推荐
- D. Equalize the Remainders (set的基本操作)
D. Equalize the Remainders time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- white-space——处理元素内的空白
定义和用法 white-space 属性设置如何处理元素内的空白.这个属性声明建立布局过程中如何处理元素中的空白符.值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的. 默认 ...
- .NET的PE文件结构篇(转)
一.开篇 开篇我要讲述一个关于PE文件结构的文章,这篇文章动手能力比较强,希望大家能够动手进行操作,这边文章篇幅有可能会长一些,为了方便大家阅读我可以将其分为几个部分进行讲解,主要分为以下几个部分: ...
- css划斜线
http://stackoverflow.com/questions/18012420/draw-diagonal-lines-in-div-background-with-css
- 【poj3693-重复次数最多的连续重复子串】后缀数组
题意:给定一个串,长度<=10^5,求它重复次数最多的连续重复子串(输出字典序最小的那个). 例如ccabcabc,答案就是abcabc 一开始没想清楚,结果调了好久. 原理: 按照L划分,因为 ...
- 汕头市队赛 SRM16
T3 C-2 SRM 16 描述 给一个数列,给出两种数字, 询问在多少个非空区间中这两种数字出现次数相同. 输入格式 第一行:一个数字n,q,n表示数列长度,q表示q组询问 第二行n个数字表示数列A ...
- 【CodeForces】841C. Leha and Function(Codeforces Round #429 (Div. 2))
[题意]定义函数F(n,k)为1~n的集合中选择k个数字,其中最小数字的期望. 给定两个数字集A,B,A中任意数字>=B中任意数字,要求重组A使得对于i=1~n,sigma(F(Ai,Bi))最 ...
- MySQL 之 foreign key
前段回顾 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #解释: 类型:使用限制字段必须 ...
- django+apache部署
参考:http://blog.csdn.net/rongyongfeikai2/article/details/13093555/ 参考:http://blog.csdn.net/yingmutong ...
- C/C++里的const(1)
首先来看这样一段程序: #include<iostream> using namespace std; int main(){ char *s = "hello world&qu ...