浅析java 的 static 关键字用法

本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包。

首先还是一张表格说一下静态对象和非静态对象的区别:

静态对象 非静态对象
归属 类共同具有 类的各个实例独立拥有
内存分配 内存空间上固定的 附属类分配
分配空间顺序 优先分配静态对象空间 优先分配静态对象空间,初始化也一样

1 静态变量,静态方法,静态块

静态对象,静态方法都是在原对象和方法上加上static关键字修饰,表示类可以直接调用这些,而不需要实例化后再调用。具有的好处是:

1--静态对象的数据是全局唯一的,一改都改,可以保证数据的唯一性

2--引用方便,直接用类名.方法(属性)就可以了,不用再get和set

当然静态方法(变量,块)也有相应的限制:

1--不能调用其他非静态方法(只能调用static方法)

2--只能访问static数据

3--不能以任何方式引用this或super

示例代码:

public class StaticExercise {
public static String sky="jeyson";
public static String getMySky(String sky){
return sky;
}
static {
System.out.println("这是静态块中的内容--");
System.out.println("静态块:"+getMySky(sky));
}
/**
* ***静态对象好处:
* 1--静态对象的数据是全局唯一的,一改都改,可以保证数据唯一。
* 2--引用方便,直接类名.方法就行了,不用set和get
* ***分配空间顺序:
* 先分配静态对象空间再分配非静态。初始化顺序也是这样
* ***static final 修饰的成员变量和成员方法可以理解为全局变量(java中没有全局变量概念)
* ***静态对象,方法,块的限制:
* 1--只能调用其他的static方法
* 2--只能访问static数据
* 3--不能以任何方式引用this或super
* 静态对象测试
*/
@Test
public void testStatic1(){
System.out.println(sky);
System.out.println("-----------------");
System.out.println(getMySky(sky));
System.out.println("-----------------");
System.out.println(StaticTest.getSms());
}
} 

2 静态内部类

当一个类跟另一个类(外部类)有紧密的联系,一般只有用到外部类的时候才会用该类的话,可以将该类作为静态的内部类。这样就可以随着类的加载而直接产生。不用再可以实例化。

使用方法:随类一同被加载,调用直接外部类.内部类.静态对象(方法)

示例代码:

class StaticTest{
public static String sms="to my sky";
public static String getSms(){
return sms;
}
/**
* 静态内部类
* ***使用场景:
* 内部类跟外部类联系紧密,一般只有用到外部类的时候才会用到这个类
* ***使用
* 随类一同被加载,直接外部类.内部类.静态对象(方法)
*/
static class InnerStatic{
public static final String MYSKY="MY FINAL SKY";
}
}
@Test
public void testStatic2(){
System.out.println(StaticTest.InnerStatic.MYSKY);
} 

2 静态导包

如果要用的静态方法所在的类跟当前类不在同一个包下,可以使用静态导包。这样你想要用的静态方法或变量就相当于在该类中直接可见,无需再类名.静态变量的方式调用。

使用方法:

import static 包名.类名.静态成员变量(方法)

好处:

被导入的静态变量和方法在该类中直接可见,直接用

坏处:

一定程度上降低了代码的可读性

代码示例:

public class MyStaticImportTest {
public static final int number=55;
public static void getMyWords(){
System.out.println("hello ,这是一个静态导包的测试");
}
} 

import static com.generic.MyStaticImportTest.number;
import static com.generic.MyStaticImportTest.getMyWords;
/**
* @Description:
* 静态
*/
public class StaticExercise {
/**
* 静态导包
* ***使用方法:
* 直接静态导入相应的变量和方法:(import static 包名.类名.静态成员变量(方法)
* import static com.generic.MyStaticImportTest.number;
* import static com.generic.MyStaticImportTest.getMyWords;
* *** 好处:
* 被导入的静态方法和变量在这个类中直接可见,无需再给出类名
* *** 坏处
* 一定程度上降低了代码的可读性
*/
@Test
public void testStatic3(){
//静态导入后可以直接用
int myNumber=number;
getMyWords();
}
} 

以上所述是小编给大家介绍的浅析java 的 static 关键字用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java中static的特点

    前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下 在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几点: 1. static在java中到底代表什么,为何要用它? 2. static在java中怎么用? 3. static 有那些特点和使用的"局限"? 4.当成员变量被静态修饰后,和非静态成员变量的区别? 1. static在java中到底代表什么,为何要用它? static――静态――

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

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

  • 浅析对Java关键字final和static的理解

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final类不能被继承,没有子类,final类中的方法默认是final的. final方法不能被子类的方法覆盖,但可以被继承. final成员变量表示常量,只能被赋值一次,赋值后值不再改变. final不能用于修饰构造方法. 注意:父类的private成员方法是不能被子类方法覆

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

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

  • Java 关键字static详解及实例代码

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量.数组和对象的引用,堆内存主要存放一些对象.在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固

  • 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静态变量的初始化完全解析

    静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: public class Test { public static Test1 t = new Test1(); public static int a = 0; public static int b; public static void main(String[] arg) { System.out.println(Test.a); System.out.println(Test.b); } } class Test1

  • Java关键字final、static使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final类不能被继承,没有子类,final类中的方法默认是final的. final方法不能被子类的方法覆盖,但可以被继承. final成员变量表示常量,只能被赋值一次,赋值后值不再改变. final不能用于修饰构造方法. 注意:父类的private成员方法是不能被子类方法覆

  • java中static关键字用法详解

    前言 static对我们来说并不陌生,也是面试经常碰到的问题,今天抽空整理了一篇总结作为笔记保存起来! static用法可以分为三大块:静态变量.静态方法.静态代码块,下面将从这三个方面分析 静态方法 通常在一个类中定义一个方法为static,即为静态方法,无需本类的对象即可调用此方法 声明为static的方法有要注意以下几点: · 它们仅能调用其他的static方法. · 它们只能访问static变量. · 它们不能以任何方式引用this或super. public class MainCla

  • Java static关键字详细介绍与用法总结

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.下面整理内容大家可以参考下. 1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法    声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它们只能访问static数据. 它们不能以任何方式引用this 或super. class Simp

随机推荐