Java中的static的使用指南

一、Java中的static使用之静态变量

1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问,也可以使用对象名进行访问。使用 static 可以修饰变量、方法和代码块。

2.public 修饰符表示公开的、公有的,静态变量使用static修饰

3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

public class HellWorld{
    String name = “Java”;//非静态变量
    static String hobby = “ programing”;//静态变量
    public static void print(){
      System.out.println(“欢迎您:” + name + ” !”);//不能直接调用非静态变量
      System.out.println(“欢迎您:” + hobby + ” !”);//可以直接调用静态变量
    }
  }

4.如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。 

public class HellWorld{
    String name = “Java”;//非静态变量
    static String hobby = “program ”;//静态变量
    //静态方法中调用非静态变量
    public static void print(){
      //创建类的对象
      HelloWorld hello=new HelloWorld();
      //通过对象来实现在静态方法中调用非静态变量
      System.out.println(“欢迎您:”+hello.name+”!”);
      //静态方法中可以直接调用静态变量
      System.out.prinltn(“欢迎喜欢”+program+”的”+hello.name);
    }
  }

5.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量 

public class HellWorld{
    String name = “Java”;//非静态变量
    static String hobby = “ programing”;//静态变量
    public void print(){//普通方法
      System.out.println(“欢迎您:” + name + ” !”);
      System.out.prinltn(“欢迎喜欢”+program+”的”+hello.name);
    }
  }

6.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法  

public class HellWorld{
    String name = “Java”;//非静态变量
    static String hobby = “program ”;//静态变量
    //非静态方法
    public void show(){
      System.out.println(“我是非静态方法,不能被静态方法直接调用。。。”);
    }
    //静态方法
    public static void show2(){
      System.out.println(“我是静态方法,可以直接被静态方法调用”);
    }
    //静态方法中通过对象来调用非静态方法。可以直接调用静态方法
    public static void print(){
      //创建类的对象
      HelloWorld hello=new HelloWorld();
      //通过对象来实现在静态方法中调用非静态方法
      hello.show();
      //静态方法中可以直接调用静态方法
      show2();
    }
  }

二、Java 中的 static 使用之静态初始化块

1.在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

2.实例变量和类变量的区别:

a) 存放位置:类变量随着类的加载而存放于方法区中;实例变量随着对象的建立存在于堆内存中。

b) 生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

3.静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。程序运行时,静态初始化快先被执行并优先于主函数,然后执行普通初始化块,最后才执行构造方法。

public class StaticDemo {
  int num1;//声明变量1
  int num2;//声明变量2
  static int num3;//声明静态变量3
  public StaticDemo(){//构造方法
    num1 = 88;
    System.out.println("通过构造方法为变量1赋值");
  }
  {//初始化块
    num2 = 99;
    System.out.println("通过初始化块为变量2赋值");
  }
  static{//静态初始化这里不能giel普通变量赋值
    num3 = 77;
    System.out.println("通过静态初始化块为静态变量3赋值");
  }
  public static void main(String[] args) {
    StaticDemo hello = new StaticDemo();//创建类的对象hello
    System.out.println("num1:" + hello.num1);
    System.out.println("num2:" + hello.num2);
    System.out.println("num3:" + hello.num3);
    StaticDemo hello1 = new StaticDemo();
  }
}

运行结果:

(0)

相关推荐

  • Java修饰符 abstract,static,final 的区别详解

    static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就是全类公有.(共有的类变量与对象无关,只和类有关). 类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件(字节码文件)读入JVM(java虚拟机),这个过程成为类的加载.JVM(java虚拟机)会通过类路径(CLASSPATH)来找字节码文件. 类变量,会

  • 从内存地址解析Java的static关键字的作用

    静态成员变量与非静态成员变量的区别 以下面的例子为例说明 package cn.galc.test; public class Cat { /** * 静态成员变量 */ private static int sid = 0; private String name; int id; Cat(String name) { this.name = name; id = sid++; } public void info() { System.out.println("My Name is &quo

  • Java中的static静态代码块的使用详解

    一.与静态方法的比较 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口.两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 二.静态方法注意事项 使用类的静态方法时,注意: a.在静态方法里只能直接调用同类中其他的静态成员(包括变量

  • 深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    java中的类可以是static吗?答案是可以.在java中我们可以有静态实例变量.静态方法.静态块.类也可以是静态的. java允许我们在一个类里面定义静态类.比如内部类(nested class).把nested class封闭起来的类叫外部类.在java中,我们不能用static修饰顶级类(top level class).只有内部类可以为static.      静态内部类和非静态内部类之间到底有什么不同呢?下面是两者间主要的不同. (1)内部静态类不需要有指向外部类的引用.但非静态内部

  • 实例分析Java中public static void main(String args[])是什么意思

    本文实例讲述了Java中public static void main(String args[])的来龙去脉.分享给大家供大家参考,具体如下: public static void main(String[] args) 这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要. jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法.这个方法必须是公有的,以便在任何位置都能访问得到.这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非stati

  • Java中static关键字的作用和用法详细介绍

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

  • Java中的static的使用指南

    一.Java中的static使用之静态变量 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象存在.静态成员可以使用类名直接访问,也可以使用对象名进行访问.使用 static 可以修饰变量.方法和代码块. 2.public 修饰符表示公开的.公有的,静态变量使用static修饰 3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员. public class HellWorld{ String

  • java中的static{}块的实例详解

    java中的static{}块的实例详解 一直以来对static块不是很熟系,今天特意写了两个程序来搞清楚一下: 第一个小程序: package com.babyDuncan.Sohu; public class testStatic { static { int x = 5; } static int x, y; public static void main(String[] args) { x--; myMethod(); System.out.println(x + y + ++x);

  • Java中的Static class详解及实例代码

     Java中的Static class详解 Java中的类可以是static吗?答案是可以.在Java中我们可以有静态实例变量.静态方法.静态块.类也可以是静态的. java允许我们在一个类里面定义静态类.比如内部类(nested class).把nested class封闭起来的类叫外部类.在java中,我们不能用static修饰顶级类(top level class).只有内部类可以为static. 静态内部类和非静态内部类之间到底有什么不同呢?下面是两者间主要的不同. (1)内部静态类不需

  • Java中的static关键字全面解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

  • 详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属于类的静态资源,是类实例之间共享的.被static关键字修饰的变量.方法属于类变量.类方法,可以通过[类名.变量名].[类名.方法名]直接引用,而不需要派生一个类实例出来. 静态资源分类存放的好处 JDK把不同的静态资源放在了不同的

  • Java中的static关键字深入理解

    在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用.毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识. 通俗来讲,归为几点: 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问.(通过 类名.方法名() 或 类名.属性 直接调用) static关键字不会影响到变量或方法的作用域 static关键字不允

  • 解析Java中的static关键字

    一.static关键字使用场景 static关键字主要有以下5个使用场景: 1.1.静态变量 把一个变量声明为静态变量通常基于以下三个目的: 作为共享变量使用 减少对象的创建 保留唯一副本 第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其可以作为共享变量使用,比如要定义一个全局配置.进行全局计数.如: public class CarConstants { // 全局配置,一般全局配置会和final一起配合使用, 作为共享变量 public static final in

  • Java中的static关键字你了解多少

    目录 一.static关键字的用途 1)static方法 2)static变量 3)static代码块 二.static关键字的误区 1.static关键字会改变类中成员的访问权限吗? 2.能通过this访问静态成员变量吗? 3.static能作用于局部变量么? 三.常见的笔试面试题 1.下面这段代码的输出结果是什么? 2.这段代码的输出结果是什么? 3.这段代码的输出结果是什么? 总结 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “static方法就是没有th

  • Java中的static关键字修饰属性和方法(推荐)

    目录 static关键字 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 1.2.静态属性的访问. 2.static关键字修饰方法 1.那些方法可以使用static修饰 2.常见的问题 static关键字 static关键词与对象无关.static关键字主要修饰四个部分的内容 这里我们主要介绍static修饰属性和修饰方法. 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 我们把static修饰的属性称为静态属性,又叫类属性

随机推荐