问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java中的 static{ …… } 是什么意思?

发布网友 发布时间:2022-04-24 02:04

我来回答

5个回答

热心网友 时间:2023-10-20 19:09

是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制),例如:
未声明为static
class ClassA{
int b;
public void ex1(){

}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //这里通过对象引用访问成员变量b
a.ex1; //这里通过对象引用访问成员函数ex1
}
}

声明为static
class ClassA{
static int b;
static void ex1(){

}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //这里通过类名访问成员变量b
ClassA.ex1; //这里通过类名访问成员函数ex1
}
}
通过以上两种比较,就可以知道static用来修饰类成员的主要作用了,在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.parseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和方法我们又叫做类变量和类方法。
接下来讲一下被static修饰后的变量的值的问题,刚才在前面讲过,被static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间,看一下下面这个例子:
class TStatic{
static int i;

public TStatic(){
i = 4;
}

public TStatic(int j){
i = j;
}

public static void main(String args[]){
TStatic t = new TStatic(5); //声明对象引用,并实例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
这段代码里面Tstatic类有一个static的int变量I,有两个构造函数,第一个用于初始化I为4,第二个用于初始化i为传进函数的值,在main中所传的值是5,程序首先声明对象的引用t,然后调用带参数的构造函数实例化对象,此时对象t的成员变量I的值为5,接着声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量i的值初始化为4了,注意了,在这里i是static,那就是说该类的所有对象都共享该内存,那也就是说在实例化对象tt的时候改变了i的值,那么实际上对象t的i值也变了,因为实际上他们引用的是同一个成员变量。最后打印的结果是三个4。呵呵,写到这里大家是否明白了呢?不明白就再看看书或者多写几个例子印证一下,呵呵。

热心网友 时间:2023-10-20 19:09

static{ …… }就是静态块,他在程序编译的时候就会自动执行(记住是编译的时候就执行,不是运行阶段),不需要调用。而且与他存在的位置没有关系,与他所在的类是否被实例化也没有关系。

热心网友 时间:2023-10-20 19:10

关于Java中的static{}块,通过调试以下两个程序就能弄清楚用途:

1、第一个小程序

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);
    }
    public static void myMethod()
    {
        y = x++ + ++x;
    }
}
#该程序输出为:3

分析如下:
执行main中的x--之后,x值为-1,执行myMethod之后,x为1,y值为0,执行输出语句表达式,该表达式的值为1+0+2=3,所以输出结果是3。

2、第二个小程序

package com.babyDuncan.Sohu;
public class testStatic2 {
    /**
     * 关于Static{}块的解释:
     * 只是在执行main之前执行的一些语句而已,并不是说里面的变量就是
     * static的,没什么特别的。
     * 临时变量只在static这个大括号中有用。
    **/
    static {
        int x = 8;
        System.out.println("这是static,这有一个变量x="+x);
    }
    static int x;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(x);
    }
}
#输出结果为:
#这是static,这有一个变量x=8
#0

热心网友 时间:2023-10-20 19:10

static是指在内存的datasegment里生成一块内存 要用的时候不用每次都new一个新的内存空间 直接用类名+static的方法名或变量名引用就可以了 args是字符串数组的名字 你喜欢也可以换成String[] haha 方括号放前面后面都可以 习惯放前面

热心网友 时间:2023-10-20 19:11

static是静态加载块。
解释:项目运行初始化过程会将static内部程序加载到内存中,不能有参数值等动态参数。
备注:一般都是加载数据库连接时候用来加载数据库驱动用的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 冻萝卜的做法大全家常 家常炝萝卜的做法 烧萝卜家常做法 如何徒手快速锻炼臂力和脚力? 关于JAVA中static的问题 “java”中“static”是什么意思?该如何使用? Java中static 的用法 炖萝卜块的家常做法 绿萝卜的做法大全家常做法 java中static是什么意思,该怎么用 萝卜做菜家常菜做法 java中static的问题 Java中static是什么? 萝卜的做法大全家常菜有哪些? 萝卜家常做法 华为nova6se有息屏时钟吗? 要什么设置 杨明鑫有女朋友吗 杨明鑫主动寻找朱云慧,希望能和好,星云cp难道要迎来转机了吗? 杨明鑫曾对朱云慧那么着迷,如今转身告白王瑛瑛,男人变心真有这么快吗? 天天向上杨明鑫是哪一期播 杨明鑫女友及个人资料,微博介绍 手臂软软的没有力气,有哪些方法能提高臂力? 红领巾照亮童年遵守纪律从我做起演讲稿 在家怎么练肌肉,(在家里,没有器械!) 无限极企业套装解读与运用演讲稿 班长演讲稿 想锻炼臂力和腹肌,如何在家里达到锻炼的目的? 如何成为优秀的培训讲师 急需一份 应聘保险组训讲师的演讲稿 谢谢 小学大队干部学习委员演讲稿咋么写? 小学生演讲稿争当道德小讲师 如何把手机来电铃声设为停机 怎么把电话铃声设为停机呢 这样把自己的手机铃声设置成停机 如何把手机彩铃改成停机彩铃 怎么把手机彩铃设置成停机了 要把手机的彩铃设置成已停机应该怎么做 怎么把手机彩铃设置成停机了? 怎么把手机彩铃设置成停机 五行属火和木的女孩有哪些名字? 我要给女儿起名,请问五行属火、木的名字有哪些??