static是静态的意思;

static修饰的成员变量,在内存中存在于方法区中,只有一份,非静态的成员变量在堆中,每个对象中都有一份

public class Demo1 {
    public static void main(String[] args) {
        
        Test t1 = new Test();
        t1.classNo = "12";
        t1.id = 12;
        Test t2 = new Test();
        t2.classNo = "25";
        t2.id = 25;
        System.out.println("t1的id: "+t1.id+"  t1的classNo:"+t1.classNo +"  t2的id: "+t2.id+"  t2的classNo: "+ t2.classNo);
    }
}

class Test{
    int id;
    String name;
    static String classNo;
    
}

如上代码控制台会输出  " t1的id: 12  t1的classNo25  t2的id: 25  t2的classNo: 25 " ,静态成员变量存在于方法区内且只有一份,非静态的成员变量在堆中,每个对象中都有一份

静态成员变量的访问方式:

1:通过对象访问
          格式: 对象.成员变量
         
      2:通过类名访问
          格式: 类名.静态的成员变量

public class Demo1 {
public static void main(String[] args) { Test.classNo = "12";
// Test.id = 12; 会报错,不是静态不可以直接通过类名调用 }
} class Test{
int id;
String name;
static String classNo; }

如果有数据需要被共享出去,就可以使用static修饰

静态成员变量和非静态成员变量的区别:

  1:存储位置
        静态成员变量:在方法区
           非静态成员变量:堆中
       
       2:数量
           静态成员变量:在内存中只有一份
          非静态成员变量:有多少对象就有多少份
         
        3:访问方式
            静态成员变量:可以通过对象访问,也可以通过类名访问
            非静态成员变量:只能通过对象访问
           
        4:生命周期:
            静态成员变量:随着类文件的加载而存在,跟着类文件的消失而消失
            非静态成员变量:随着对象的创建而存在,对象被垃圾回收器回收时消失
 
        5:作用
           静态成员变量:共享一个数据给所有对象使用
           非静态成员变量:描述一类事物的公共属性

当一个类被主动使用时,Java虚拟就会对其初始化(加载这个类,初始化为加载的最后一步),如下六种情况为主动使用:

1、当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)
    2、当调用某个类的静态方法时
    3、当使用某个类或接口的静态字段时
    4、当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时
    5、当初始化某个子类时
    6、当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

 static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化,静态代码块执行等工作。

     static修饰方法:
       访问方式:
          1:通过对象访问
          2:通过类名访问

    静态方法被调用时执行

     静态方法注意点:
           1:静态方法可以直接访问静态成员(变量,方法),不能直接访问非静态成员, 可以通过对象访问非静态成员
           2:非静态方法可以直接访问静态成员和非静态成员
           3:  静态方法中不能出现this关键字和super关键字
           4:静态方法可以通过类名或者对象调用,非静态方法只能通过对象调用

public class Demo {

    /**
* @param args
*/
public static void main(String[] args) { Person3.study(); // 通过类名调用静态方法 new Person3("aa",20).study(); // 通过对象调用静态方法 System.out.println(Person3.classNo); // 通过类名访问静态成员变量
} } class Person3{
String name;
int age;
static String classNo = "52"; static{ System.out.println("静态代码块");
} public Person3() { } public Person3(String name, int age) { this.name = name;
this.age = age;
} public static void study(){
// System.out.println("学习"+classNo); // System.out.println("姓名:"+new Person3().name); // 静态的方法不能直接访问非静态的成员变量 // compare(new Person3()); // 静态的方法不能直接访问非静态的方法
eat(); // 静态的方法可以直接访问静态的方法
} public static void eat(){
System.out.println("eat..."+classNo); // 静态的方法可以直接访问静态的成员变量
} public void compare(Person3 p){
eat(); // 非静态的方法可以直接访问静态的方法 if(this.age > p.age){
System.out.println(this.name+"比"+p.name+"大");
}else if(this.age < p.age){
System.out.println(this.name+"比"+p.name+"小");
} else {
System.out.println(this.name+"和"+p.name+"一样");
}
} public String toString() {
return "Person3 [name=" + name + ", age=" + age + ", classNo="
+ classNo + "]";
} }

关于static的更多相关文章

  1. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  2. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  3. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  4. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  5. static,你还敢用吗?

    我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Android 中关于static的使用问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...

  8. iOS: 在UIViewController 中添加Static UITableView

    如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...

  9. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

  10. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

随机推荐

  1. Exchange ProxyLogon漏洞分析

    Exchange ProxyLogon漏洞分析 前言 续前文继续学习Exchange漏洞 Proxyshell 影响范围 Exchange Server 2019 < 15.02.0792.01 ...

  2. InnoDB学习(七)之索引结构

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找 ...

  3. Hadoop单点安装(伪分布式)

    Hadoop单点安装,基于版本2.7.1, 在一台Lunix主机上面安装Hdoop, 包括Hdfs的NameNode和DataNode, 以及Yarn的ResouceManager和NodeManag ...

  4. html基础 有语义的布局标签

  5. Git_添加、删除远端仓库中的文件

    一.将文件添加到远端仓库 1.新增文件 2.使用git add 将文件添加到本地缓存中 3.使用git commit 将文件添加到本地仓库中 4.使用git push 将本地仓库中的修改同步到远端仓库 ...

  6. 新增访客数量MR统计之NewInstallUserMapper中维度信息准备

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  7. 学习Java爬虫文档的学习顺序整理

    1.认识正则表达式(Java语言基础) https://www.toutiao.com/i6796233686455943693/ 2.正则表达式学习之简单手机号和邮箱练习 https://www.t ...

  8. Springboot整合Mybatis,连接多个数据库(Mysql+Oracle)

    maven依赖,需要注意的是mysql使用的版本 1 <dependencies> 2 <dependency> 3 <groupId>com.oracle.dat ...

  9. java如何对接企业微信

    前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录. 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态. 企业微信提供了丰富的api进行 ...

  10. 文件上传之结合phpinfo与本地文件包含利用

    背景 某站点存在本地文件包含及phpinfo,可以利用其执行脚本. 原理 原理: 利用php post上传文件产生临时文件,phpinfo()读临时文件的路径和名字,本地包含漏洞生成1句话后门 1.p ...