• java static关键字


    最近学习jsp才发现自己的java基础不够牢固,于是执笔对java重新来过,温习一下这个强大的面向对象的语言。
    今天看到static关键字,感觉自己掌握的也不牢靠,于是查阅了很多的资料来写下这篇文章,一方面也是为java奋斗小生写的指示牌,另一方面也是为了巩固自己的知识。

    static表面看起来就可以看出其的作用所在,那就是静态,在java里,可以用它进行三种形式的修饰。
    1、修饰字段
    2、修饰方法
    3、修饰一个代码块

    我们先来看第一个修饰字段

    public class Temp {
    	public static int i = 0;
    	public static float f = 1.2f;
    	public static double d = 1.2;
    	public static boolean b = true;
    }
    

    这里把 int float double boolean类型的字段都修饰了一遍,当该类的class文件被加载的时候,这几个字段的内存就会被初始化,然而虽然它们在这个类中,却跟这个Temp类没有多大的千丝万缕的关系,他们是独立的,是一块静态内存,所谓静态,就是编译时已经被初始化了,所以他们比一般的变量要快。而访问它们的时候也是自然会很方便。
    我们不必去创建这个类的对象,而是直接通过类名去访问即可。
    例如:

    public class Main {
    	public static void main(String[] args){
    		System.out.println(Temp.i);
    		System.out.println(Temp.f);
    		System.out.println(Temp.d);
    		System.out.println(Temp.b);
    	}
    }
    

    这样实际是没有语法问题的,因为它们是静态的。
    下面来看一下用static关键字修饰的方法。这个和修饰字段的意义差不多,它也被一块独立的静态内存所储存着,也可以通过类名直接调用,或者我们可以称它为类方法

    public static void func(){
    	System.out.println("hello world");
    }
    

    这样的话我们就可以在主函数中通过它的类名来调用了,这样的话是非常方便的,也很有利于解耦。

    Temp.func();//hello wrold
    

    第三种就是由一对大括号加上static关键字而修饰的静态代码块

    static {
        //
    }
    

    通常我们用它来初始化静态的变量和对象

    public class Temp {
    	static String a = null;
    	static{
    		a = "haodawang";
    	}
    }
    

    我们在类中定义一个String类型的变量,并给他指明为null,而在static代码块中我们实现了对它的初始化,但是怎样调用这个static代码块呢?目前来说有两种方法。
    1、调用在static代码块中初始化的变量
    2、创建该类的实例

    先来看第一种方式

    public class Main {
    	public static void main(String[] args){
    		System.out.println(Temp.a);
    	}
    }
    

    我们这里直接打印了Temp.a,如果static代码块没有被执行,那么这里应该会是Null,但是通过打印我们会看到打印出来的是haodawang,这也是我们意料之中的事情,正如我们前面所说,被调用代码块内的变量时,整个代码块都会被执行,值得注意的是,不管怎么样,static代码块都会只执行一次,执行一次之后就再也不会被执行。

    其实第二种大家也可以推断出来了,因为被加载了class文件,所以static代码块自然会被加载。这里我也不再去用代码给大家演示,大家可以自己写写试试吧。

  • 相关阅读:
    Java基础-String、StringBuffer、StringBuilder的区别
    Java基础-String类能被继承吗,为什么
    Java基础-Java中的基本数据类型是什么,各自占用多少字节
    JAVA关键字
    Java 栈(stack)与堆(heap) 详解
    Hibernate--hibernate.hbm.xml详解
    Hhibernate--映射继承关系
    C--c语言模拟java的linkedList
    C--调试基本命令
    C--指针
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967268.html
Copyright © 2020-2023  润新知