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

java中static关键字的使用的更多相关文章

  1. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  2. [java基础]java中static关键字

    1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ...

  3. java中static关键字解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  4. Java中static关键字的详解

    static关键字可以修饰方法和成员变量(不可以修饰局部变量,但是可以修饰内部类). static关键字方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者 ...

  5. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  6. 【java_需阅读】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  7. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  8. Java中static关键字用法总结

      1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ...

  9. java中static关键字的理解(转载)

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

随机推荐

  1. chrom调试

    2.Event Listeners 可以看到事件找到对应在标签点开里有useCapture, passive: once: handler等等右键handler 的"show functio ...

  2. TweenLite简单运用

    参考:TweenLite说明 1 ease TweenLite.to(nextLevelTip, 1.5, { x:0, ease:Bounce.easeOut } ); 2 delayCall 语法 ...

  3. create sequence

    create sequence seq_test start with 3 increment by 1 minvalue 1  --范围-(1027 -1) maxvalue 99999999999 ...

  4. supervisor 配置篇

    1,配置管理进程 进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中. 1&g ...

  5. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte sequence

    使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character ' ...

  6. scrapy爬虫系列之二--翻页爬取及日志的基本用法

    功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...

  7. Wormholes---poj3259(最短路 spfa 判断负环 模板)

    题目链接:http://poj.org/problem?id=3259 题意是问是否能通过虫洞回到过去: 虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts. 我们把虫洞看成是一条负权路,问 ...

  8. 二.re库介绍

    一.re库的主要功能函数 1.re.search()用法 2.re.match()的用法 >>> match=re.match(r'[1-9]\d{5}','BIT 100081') ...

  9. AOP切点表达式

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  10. (2.9)Mysql之SQL基础——索引的查看与删除

    (2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...