static 使用之静态变量:

大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!

Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~

使用 static 可以修饰变量、方法和代码块。

本小节,我们先认识一下静态变量。

我们先来看一段简单的代码你就会明白什么是静态变量!

 public class HelloWorld{
static String name = "Hello Java";//用static修饰的变量就是静态变量
public static void main(){
System.out.println("通过类名访问它:"+HelloWorld.name);
HelloWorld hello = new HelloWorld();
System.out.println("通过对象访问它:"+hello.name);
hello.name = "我是最棒的!";//使用对象名的形式来修改静态变量的值!
System.out.println("通过类名访问它:"+HelloWorld.name);
}
}

要注意哦:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~

static使用之静态方法:

与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。

静态方法的使用如下:

 public class HelloWorld{
public static void print(){
System.out.println("我爱Java”);
}
public static void main(String [] args){
//直接实用类名调用
HelloWorld.print();
//也可以创建对象调用它
HelloWorld demo = new HelloWorld();
demo.print();
}
}

1.静态方法中可以直接条用同类中的静态成员;但是不能调用非静态成员;

 public class HelloWorld{
static String name = "hello";
String hobby = "hello";
public static void main(String [] args){
System.out.println("同类中可以直接调用静态成员"+name);
System.out.println("不可以直接调用非静态成员"+hobby);
}
}

如果想要调用非静态成员我们可以创建对象来调用他:

1 public class HelloWorld{
2 static String name = "hello";
3 String hobby = "hello";
4 public static void main(String [] args){
5 System.out.println("同类中可以直接调用静态成员"+name);
6 HelloWorld hello = new HelloWorld();
7 System.out.println("不可以直接调用非静态成员"+hello.hobby);
8 }
9 }

2.在普通成员方法中,既可以直接使用静态成员变量也可以直接使用非静态成员变量:

 public class HelloWorld{
static String name = "hello";
String hobby = "hello";
public void show(){
System.out.println("同类中可以直接调用静态成员"+name);
System.out.println("可以直接调用非静态成员"+hobby); }
}

static 使用之静态初始化块:

 public class HelloWorld{
String name;
//通过初始化块给成员变量赋值
{
name = "我爱Java";
}
}

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

1 public class HelloWorld{
2 static String name;
3 //静态初始化代码块
4 static{
5 name = "我爱Java";
6 }
7 }

需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

我们来看一段代码:


  public class HelloWorld{
int num1;
int num2;
static int num3;
public HelloWorld(){
num1 = ;
System.out.println("通过构造方法为变量num1赋值!");
}
{//初始化块
num2 = ;
System.out.println("通过初始化块为变量num2赋值!");
}
static {
num3 = ;
System.out.println("通过静态初始化块为静态变量num3赋值!");
}
public static void main(String [] args){
HelloWorld hello = new HelloWorld();
System.out.println("num1:"+hello.num1);
System.out.println("num2:"+hello.num2);
System.out.println("num3:"+num3);
HelloWorld hello2 = new HelloWorld();
}
}
运行结果:
通过静态初始化块为静态变量num3赋值!
通过初始化块为变量num2赋值!
通过构造方法为变量num1赋值!
num1:91
num2:81
num3:56
通过初始化块为变量num2赋值!
通过构造方法为变量num1赋值!

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。


Java中static的使用的更多相关文章

  1. java中static关键字的作用

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

  2. Java中static的用法,初始化块

    使用 Arrays 类操作 Java 中的数组语法: Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该 ...

  3. Java中static块执行时机

    Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...

  4. Java学习笔记十七:Java中static使用方法

    Java中static使用方法 一:Java中的static使用之静态变量: 我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的 ...

  5. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  6. Java中static final 与 final 的区别(转载)

    转自:http://advance0683.iteye.com/blog/1107732 Java中static final 与 final 的区别: 例子: Java代码 import java.u ...

  7. Java中static修饰类的问题

    Java中static修饰类的问题 众所周知,Java中static关键字可以修饰方法与变量: 修饰变量的时候,这个变量属于类变量,可以直接通过类名.变量名来引用. 修饰方法的时候可以直接通过类名.方 ...

  8. Java 中 static 的作用

    static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...

  9. 关于java中static的应用及一种常见错误

    JAVA中的static的应用 在web项目的开发中,遇到了类中的static方法不奏效. 在开发过程中,我定义了一个静态方法初始化数组,但是在创建类的对象后,访问该数组是全为null.我一直以为st ...

  10. Java中static的用法

    static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量.随后,static表示不能被其他文件访问的全局变量和函数.到了C++和java,static表示属于 ...

随机推荐

  1. ffmpeg代码解析

    void avdevice_register_all(void){    static int initialized;    if (initialized)        return;    i ...

  2. vue - .gitignore

    描述:npm官方屏蔽上传文件编写文件. 举例(屏蔽的文件/文件夹记得分行) 屏蔽文件:yarn.txt 屏蔽文件夹:/dist/

  3. 一步一步学Spring.NET——1、Spring.NET环境准备

    Spring.NET 1.3.2下载地址:http://down.51cto.com/data/861700 下载后解压 Spring.NET-1.3.2.7z:这个里面有我们须要用到的全部东西. S ...

  4. CCF-201512-3 绘图

    问题描写叙述 用 ASCII 字符来绘图是一件有趣的事情.并形成了一门被称为 ASCII Art 的艺术.比如,下图是用 ASCII 字符画出来的 CSPRO 字样. .._._.._.._-_.. ...

  5. 在LoadRunner中进行Base64的编码和解码

    <Base64 Encode/Decode for LoadRunner>这篇文章介绍了如何在LoadRunner中对字符串进行Base64的编码和解码: http://ptfrontli ...

  6. {...formItemLayout} 标签布局

    {...formItemLayout}是reactjs中属性的写法{...props},formItemLayout标签布局,wrapperCol需要为输入控件设置布局样式时,和label 标签布局, ...

  7. recess----1.第一个APP-helloRecess

    选择recess的理由很简单,这个架构看起来很轻量级,很简单.至少是写起应用来感觉不需要考虑太多和架构相关的东西.没有按作者给的过程一步步来,折腾了好久...在这里记录一下. 安装过程略,官网文档无压 ...

  8. 使用Apache MINA框架搭建服务端

    使用MINA框架搭建服务端步骤: 1.定义一个启动服务的类MinaServer,并实现接口ServletContextListener 2.定义一个处理业务逻辑的类MinaServerHandler, ...

  9. 【Statistics】CAP曲线

    功能描述 CAP曲线(Cumulative Accuracy Profile)/Power Curve(准确率/AR)是描述整个评级结果下,累计违约客户比例与累计客户比例的关系. 在完美的模型下,CA ...

  10. Hibernate 一对一关联查询

    版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5602418.html  一对一关联,可以分为两种.一种是基于外键的关 ...