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 ...
随机推荐
- ng依赖注入
依赖注入 1.注入器在组件的构造函数中写服务constructor(private httpreq:HttpService) { } 2.提供器 providers: [HttpService],
- HDU 1698 Just a Hook(线段树
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- java的URI和URL到底是什么
在我们做开发时,经常有URI和URL弄混的问题,如果当时直接看URI和URL的源码就不可能弄混.首先我总结一下URI和URL的关系:他们的关系是:URL是一种特殊的URI,是URI包括URL, 下面用 ...
- JS模块化工具requirejs教程02
基本API require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短 define 从名字就可以看出 ...
- 【BZOJ4774】修路 [斯坦纳树]
修路 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 5 5 2 ...
- [Leetcode Week10]01 Matrix
01 Matrix 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/01-matrix/description/ Description Given a ...
- 使用Tslib在触摸屏上显示汉字【转】
转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...
- golang中的反射
反射操作普通变量 package main import ( "fmt" "reflect" ) func main(){ a := 1 //reflect.T ...
- 《Java编程思想》笔记 第四章 控制执行流程
1.true和false if--else if--else, while, do--while 都使用条件表达式的真假来决定执行路径. Java不允许数字作为真假判断,C和C++可以非0即真. 2. ...
- JVM CMS 常用参数配置(修订)
搜集到的一些参数内容,比较有用,大部分转载自并发编程网ifeve.com. -XX:+UseConcMarkSweepGC该标志首先是激活CMS收集器.默认HotSpot JVM使用的是并行收集器. ...