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. nignx-防盗链

    环境 主机                  IP            角色 centos6.5-1       192.168.3.10      源主机 centos6.5-2       19 ...

  2. java字符串比较是否都可直接使用==?

    java字符串比较,两个字符串相不相等,直接用==来判断可以吗?或者判断两个字符串不相等,直接用!=? 不能 两个对象进行比较,如果使用==符号,那么比较的是这两个对象的"引用"( ...

  3. python 报错:RecursionError: maximum recursion depth exceeded

    RecursionError:maximun recursion depth exceeded 超过了最大递归深度 原因: 在使用@property装饰器时,方法名与实例的属性同名,在赋值进从而产生了 ...

  4. nginx中请求大小的限制的设置

    Nginx对客户端请求缓冲区大小有个默认限制,如果超过了该值(比如在上传大文件时),会报500错误. 只需要设置三个值,就可以解决该问题: 1. client_body_buffer_size: 指定 ...

  5. Hive的分析函数的使用

    原文: https://www.toutiao.com/i6769120000578945544/?group_id=6769120000578945544 我们先准备数据库.表和数据 开窗分析函数相 ...

  6. Java的JDBC

    第一个JDBC程序 创建测试数据库 CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci; USE jdbcStud ...

  7. Solon 开发,四、Bean 扫描的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  8. 创建app子应用,配置数据库,编写模型,进行数据迁移

    文章目录 web开发django模型 1.创建app子应用 2.配置子应用 3.使用 4.配置子应用管理自已的路由 django数据库开发思维与ORM 1.创建数据库 2.配置数据库 3.安装pymy ...

  9. 论文解读二代GCN《Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering》

    Paper Information Title:Convolutional Neural Networks on Graphs with Fast Localized Spectral Filteri ...

  10. sql 语句实现实现特殊查询 总结

    统计某一字段不为空 select count(*) from 表名 where 字段名 is not null 统计某一字段为空 select count(*) from 表名 where 字段名 i ...