java中static关键字的使用
知识点:java中,static关键字修饰类的变量、方法、代码块、内部类
场景:我们在创建类的方法和变量时,如果这个类在创建多个对象时,共用同一个属性或者方法,就可以使用static关键字修饰,因为static修饰的变量,在内存的静态域存在的值,被类的多个实例所共用,实际上我们在编写一个类时,就是在描述对象的属性和行为,并没有产生实质上的对象,只有使用new关键字,才会产生对象,这时系统才会分配内存给对象,其方法才可以供外部调用。如果让多个对象共用内存空间的一份数据,就可以使用static关键字。
实例:
public class Test {
    public static void main(String[] args) {
       Person person1=new Person("张三",20,"人类");
       Person person2=new Person("李四",21,"人类");
        System.out.println(person1);
         //Person.name="王五";
         //person1.setType("非人类");
         Person.type="非人类";
        System.out.println(person1);
        System.out.println(person2);
    }
}
class Person{
    //实例变量
    public   String name;
    public  int age;
    //类变量
    public static String type;
    public Person(){
    }
    //构造方法
    public Person(String name, int age, String type) {
        this.name = name;
        this.age = age;
        this.type = type;
    }
    @Override
    public String toString() {
        return "Person[name="+name+",age="+age+",type="+type+"]";
    }
    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;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}
程序执行结果:

上面实例可以看到,当我们实例化,类Person的两个对象,person1和person2,并且用构造方法初始化变量值以后,Person.type="非人类" 修改类的static静态变量type的值,会导致person1和person2
两个对象的type属性都发生改变(人类=》非人类),这就因为static修饰的类变量在内存的静态域申请一份空间,类的多个实例共用这一个内存空间,如果没有用static关键字修饰的变量,在初始化多个对象时
变量会在内存中,申请多块内存空间。如Person的name和age属性
相关的内存分配如下图:

修改了Person.type="非人类"之后,则变为:
 关于static修饰的类的属性和方法时补充:
关于static修饰的类的属性和方法时补充:
   (1)与对象无关,调用方法直接用类名.方法名,调用属性则使用类名.属性名,也可以使用对象来调用;
   (2)static修饰的属性,无论创建多少个对象,在内存里只有一份存储空间;
   (3)static修饰的方法不能调用非static修饰的属性或者方法,反之则可以(static修饰的类的方法和属性时,在类加载,就已经产生了,而非static方法在类实例化对象时,才产生,
所以迟些,只有迟产生的调用早的,早来的是不能调用迟的)
   (4)static修饰的类,必然是静态的内部类
 针对于(3)静态的方法不能调用,非静态的属性或者方法,举个简单的例子,我平时在写demo时,会将main作为调试的入口类,逻辑代码写testMethod()中,在main调用
testMethod()时就会出错。
 这正是因为main方法有static关键字修饰,是静态的方法,无法调用testmethod()非静态方法,但是可以调用静态的方法,解决方法就是把非静态的方法变成静态的方法,加static
  这正是因为main方法有static关键字修饰,是静态的方法,无法调用testmethod()非静态方法,但是可以调用静态的方法,解决方法就是把非静态的方法变成静态的方法,加static

												
											java中static关键字的使用的更多相关文章
- java中static关键字的作用
		java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ... 
- [java基础]java中static关键字
		1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ... 
- java中static关键字解析
		static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ... 
- Java中static关键字的详解
		static关键字可以修饰方法和成员变量(不可以修饰局部变量,但是可以修饰内部类). static关键字方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者 ... 
- 【转】Java中static关键字用法总结
		1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ... 
- 【java_需阅读】Java中static关键字用法总结
		1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ... 
- 关于java中Static关键字的加强理解
		static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ... 
- Java中static关键字用法总结
		1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ... 
- java中static关键字的理解(转载)
		static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ... 
随机推荐
- MongoDB复制集原理
			版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/136 来源:腾云阁 https://www.qclo ... 
- poj3734 Blocks[矩阵优化dp or 组合数学]
			Blocks Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6578 Accepted: 3171 Descriptio ... 
- 【BZOJ3772】精神污染 DFS序+主席树
			[BZOJ3772]精神污染 Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是 ... 
- 【BZOJ1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组
			[BZOJ1717][Usaco2006 Dec]Milk Patterns Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量 ... 
- hdu4975 网络流解方程组(网络流+dfs判环或矩阵DP)
			http://acm.hdu.edu.cn/showproblem.php?pid=4975 A simple Gaussian elimination problem. Time Limit: 20 ... 
- vue.js实现初了解(一)
			1. vue 2.0是用Flow做静态类型检查, 3.0对TypeScript的支持更好了: 2. vue.js是基于Rollup(更轻量,适合js库的构建)构建的,它的构建相关配置都在scripts ... 
- 170808、生成为CVS文件
			/** * Desc : 生成为CVS文件 * User : RICK * @param data 源数据List * @param map csv文件的列表头map * @param outPutP ... 
- Tickets---hdu1260 (简单dp)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意就是有n个人排队买票,每个人需要的时间是a[i] (1=< i <=N),但是现 ... 
- PHP 自动加载的简单实现(推荐)
			基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php |--Service |- ... 
- HDU2426:Interesting Housing Problem(还没过,貌似入门题)
			#include <iostream> #include <queue> #include <stdio.h> #include <string.h> ... 
