java类static
‘壹’ java类里的static方法
static是静态的意思。
如果你别的方法体里面不是声明成 静态的 就不能直接点出来,
只能使用new
如果是几个方法 或类里面都表明了static 相互"调用"就可以直接用点(.)的形式找出来。
‘贰’ java中static是什么意思
static是指在内存的datasegment里生成一块内存 要用的时候不用每次都new一个新的内存空间 直接用类名+static的方法名或变量名引用就可以了 args是字符串数组的名字 你喜欢也可以换成String[] haha 方括号放前面后面都可以 习惯放前面
‘叁’ Java中的 static{ …… } 是什么意思
是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在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。呵呵,写到这里大家是否明白了呢?不明白就再看看书或者多写几个例子印证一下,呵呵。
‘肆’ java中static怎么用
static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量
class B {static int a=0;}
B b1=new B();..................;B bn=new B();
b1~bn 都是类B的实例,每个实例都共享 变量a,a是全局变量,属于类B的属性,每个实例都能引用变量a,
加入执行b1.a=1;后 那么b2.a,b3.a,b4.a......bn.a 都等于1了,
static 方法也是类似的
需要注意的是 静态属性和方法属于类方法,加载类后,就已经存在静态属性和方法,实例是需要用new构造出来后 才会有引用
根据先后顺序,就有以下两条规则
1、非静态的方法可以调用静态的或者非静态的属性和方法;
2、静态的方法不可以调用非静态的属性和方法,因为非静态的还不一定存在,只能先构造出来后,再通过实例引用
例如 在main方法中 可以直接调用static 的方法,调用非static方法 需要先构造出类的实例,通过实例才能调用方法
‘伍’ java中static的作用是什么意思
关于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
‘陆’ java新手为什么java类中要有static静态方法
1。静态方法的特点: 直接调用类名+方法名,不需要实例化类对象。
如: Hello.P();
非静态方法则必须实例化一个对象出来,再通过对象调用该方法如: Hello hello=new Hello(参数1~n); hello.P();
2。程序被打包成.jar文件后(相当于.exe文件),给外界唯一的接口就是main方法。使用者双击.jar文件,其实就是让虚拟机执行main方法。
3。main方法不是提供给程序员的,而是提供给虚拟机和使用客户的。 一个软件你没法让客户知道你内部的详情,当然客户也就没办法知道怎么去实例化对象,更不知道实例化对象时需要输入什么参数了。所以只能采用静态方法。
‘柒’ JAVA中的static
Java是个面向对象编程的语言,一般而言,方法需要通过实例对象来调用。但是有一些方法不需要实例对象(或者说没有这样的对象)来调用,那么就可以在方式前面加上static修饰符,表示这个方法是静态方法,不需要实例对象就可以调用。
例如String类的valueOf(int arg0)方法,作用是得到整数参数arg0的字符串表示,不需要创建出一个String类的实例对象来调用这个方法,所以它是static的。
如果你学过C/C++,你就会知道C/C++程序有一个入口,就是main()函数。电脑执行C/C++程序的时候就以main()函数作为入口,首先执行main()函数。Java也是类似,JVM首先调用main()方法。这个时候还没有什么实例对象呢,所以必须把main()方法声明为static,以便JVM调用。
如果是在类中变量前加static修饰的话,就是另外一个意思了。例如“人”这个类,有一个成员变量叫做“姓名”。现在new一个“人”的实例对象叫做“张三”,再new一个“人”的实例对象叫做“李四”。张三、李四自然有各自的“姓名”,它们的“姓名”成员变量在内存当中各自占一块存储单元,互不干扰。但是,如果在“人”这个类的“姓名”成员变量前加上static修饰的话,那么就变成了类变量。还是new出来“张三”“李四”,这次张三、李四的“姓名”在内存中就不是各自独立的存储区域了,而是共用一个存储区域。所有“人”的实例对象的“姓名”其实都是指的那一个存储单元。无论创建10个“人”对象还是100个“人”对象,它们的“姓名”指向的都是内存中的那一个存储单元。如果被更改了,实际上所有的对象的“姓名”都会改了,因为它们引用的都是内存中的那一个存储单元。就好像这个变量是属于类而不是属于实例对象的。
静态方法因为不需要实例对象就可以调用,所以当然其中也不可以使用实例对象变量。原因很简单啊,调用静态方法的时候怎么知道实例对象有没有创建、实例对象变量有没有初始化过呢。还是拿String类的valueOf()方法举例。假设valueOf()方法里面调用了String的一个实例对象str的某个成员变量。
那么以下这行代码
String.valueOf(10);
执行的时候,如何确定此时str对象就一定被创建出来并且成员变量都初始化过有值了呢?
‘捌’ java 类名 前 加static
static关键字表示静态的意思,那么什么是静态呢,静态的意思是就是不用实例化,或者说不用new,就可以调用,普通的方法,属性是要经过new之后才会在内存中出现,才能用.比如:Number nb=new Number();
nb.Add();用法是对象名点方法
而加了static之后你不用new它,它就已经在内存中了,就可以直接用.
用法是类名点方法.Number.get();不过前提get()前面加了static.
还有你要搞清楚,类不可能是静态的,也就是说类前面不能加static,只有方法和属性才能加.
‘玖’ java的一个类,不加static修饰,默认是静态的吗
不是,静态的是需要加static修饰才是静态的,有一个特殊的,在接口(Interface)里所有的变量都是static的。因为Interface不能实例化,所以变量默认就是static的,所以我们好多人习惯用Interface去做常量库。
就是你在接口里定义一个变量 String a="a"; 其实他默认是 public static String a="a";
因为他不能实例化,那么他定义的变量就没人能用的了,所以就是默认就是公开,静态的!
‘拾’ java中的static
问题不是出在你有没有加static ,把你的测试代码发来看看吧
private static int max;相当于你在获取类对像的时候,max会被同时初始化,值为0;并且max的值的变化会被记录下来,生命周期是整个应用程序
Compare t=new Compare();
System.out.println(t.max); //0
t.max=2;
System.out.println(t.max); //2
Compare t2=new Compare();
System.out.println(t2.max); //2
不知道你明白了吗
都用的你的代码,全没有加static 结果也是对的