包含static使用java的词条

博主:adminadmin 2022-11-27 01:26:10 59

本篇文章给大家谈谈static使用java,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中的static的用法。

这个问题是 实例变量和类变量的区别。用static修饰的变量是类变量,而没有的为实例变量。

不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所以对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。

当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类实例成员变量不会被分配内存。但是,类中的类变量被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。类变量是与类相关联的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。

JAVA编程中static的用途与用法

1修饰符static

1)静态类变量(修饰成员变量):

1.Static int data语句说明data为类变量,为一个类的共享变量,是所有对象共享的,它不

属于任何对象,是属于整个类的(静态方法也是一样)。

2.Static定义的是一块为整个类共有的一块存储区域。

3.其变量可以通过类名去访问:类名.变量名(与通过对象引用访问变量是等价的)。

2)静态方法(修饰方法):

1.Public static void printData(){}:表明此类方法为类方法(静态方法),访问是在编译期

完成,执行效率比较高。

2.静态方法不需要有对象,可以使用类名调用(不需要实例也可以调用静态方法)。3.静态方法中不能访问类的非静态成员,包括成员变量和方法;只能访问本类中的静态

变量和其它静态方法。因为此时是通过类调用的,没有对象的概念。方法中this.data和

super.data是不可用的。

原因:从根本上说,静态变量不管类是否实例化都会存在,而实例变量只有类实例化了

才存在。直接调用静态方法时并不确定实例变量是否存在。

4. 一般情况下,主方法是静态方法,所以JVM可以直接调用它,主方法为静态方法是因

为它是整个软件系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。

5.静态方法不能被覆盖,如果子类中有和父类重名的静态方法,虽然编译通过,但它并

不能实现多态,所以不能称作覆盖。例如:class Super{

static public void show(){System.out.println("in Super");}

}class Sub extends Super{

static public void show(){System.out.println("in Sub");}

}

public class Test {

public static void main(String[] arg) {

Super s = new Sub();

s.show();

}

}

执行结果是: in Super3)静态代码块(修饰没有名字的代码块):

1.只被执行一次;

2.初始化块在类被加载后首先被运行,不管类是否实例化,而且只执行这一次

3.作用:一般用来初始化一些复杂类型的静态变量。

4)静态内部类(注意:只能修饰成员内部类):

class Out{

public static class Inner{}

}5)Static通常用于Singleton模式开发:

Singleton模式(单例模式):是一种设计模式,高于语法,可以保证一个类在整个系统

中仅有一个对象。

1.问题域:

系统中你需要获得某个类的唯一实例,所有客户端对它的访问都将通过一个公共的访问点获得。

2.解决方案:创建一个类并使其

a.定义一个私有的构造器;

b.定义一个私有、静态的实例变量指向自己(类型是自己的类型);

c.定义一个公有、静态的访问方法getInstance()用于返回该类的唯一实例(注:

懒汉式需同步)。 3.分类:

a.饿汉式:在类装载的时候就进行实例化;

b.懒汉式:在公有、静态的访问方法(同步:用synchronized修饰)中进行实例化,

用的多一些。 实现1:

public class ConnectionFactory{

private static Connection conn;

private Connection(){

if(conn==null)

conn = new Connction();

}

public Connection getInstance(){

return conn;

}

}实现2:

public class ConnectionFactory{

private static Connection conn;

static{

conn = new Connection();

}

public static Connection getInstance(){

return conn;

}

}

java中 static 使用

昏,这么简单的东西。它说你的变量sid是不可见的。就是说,sid是私有的,private的,类外是不可用的。如果你想用它必须去掉private。

解决办法1:将private static int sid = 0; 中的private去掉

解决办法2:再类Cat中加入个方法

public static void setSid(int id){

sid = id;

}

然后主方法中Cat.sid = 100;改成Cat.setSid(100); mimi.sid = 2000;换成mimi.setSid(2000);

朋友,你没理解private访问控制符的特点

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如何使用?

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static成员的最常见的例子是main( )。因为在程序开始执行时必须调用main(),所以它被声明为static。声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。

声明为static的方法有以下几条限制:

· 它们仅能调用其他的static方法。

· 它们只能访问static数据。

· 它们不能以任何方式引用this或super(关键字super与继承有关,在下一章中描述)。

如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次。

下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

class UseStatic {

static int a = 3;

static int b;

static void meth(int x) {

System.out.println("x = " + x);

System.out.println("a = " + a);

System.out.println("b = " + b);

}

static {

System.out.println("Static block initialized.");

b = a * 4;

}

public static void main(String args[]) {

meth(42);

}

}

一旦UseStatic类被装载,所有的static语句被运行。首先,a被设置为3,接着static块执行(打印一条消息),最后,b被初始化为a*4或12。然后调用main(),main()调用meth(),把值42传递给x。3个println ( )语句引用两个static变量a和b,以及局部变量x 。

注意:在一个static方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized.

x = 42

a = 3

b = 12

在定义它们的类的外面,static方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method( )

这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一static变量可以以同样的格式来访问——类名加点号运算符。这就是Java如何实现全局功能和全局变量的一个控制版本。

下面是一个例子。在main()中,static方法callme()和static变量b在它们的类之外被访问。

class StaticDemo {

static int a = 42;

static int b = 99;

static void callme() {

System.out.println("a = " + a);

}

}

class StaticByName {

public static void main(String args[]) {

StaticDemo.callme();

System.out.println("b = " + StaticDemo.b);

}

}

下面是该程序的输出:

a = 42

b = 99

static成员是不能被其所在class创建的实例访问的。

如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的

java中static的用法

static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。拿以下程序为例

class Value{

static int c=0;

Value(){

c=15;

}

Value(int i){

c=i;

}

static void inc(){

c++;

}

}

class Count{

public static void prt(String s){

System.out.println(s);

}

Value v=new Value(10);

static Value v1,v2;

static{

prt("v1.c="+v1.c+" v2.c="+v2.c);

v1=new Value(27);

prt("v1.c="+v1.c+" v2.c="+v2.c);

v2=new Value(15);

prt("v1.c="+v1.c+" v2.c="+v2.c);

}

public static void main(String[] args){

Count ct=new Count();

prt("ct.c="+ct.v.c);

prt("v1.c="+v1.c+" v2.c="+v2.c);

v1.inc();

prt("v1.c="+v1.c+" v2.c="+v2.c);

prt("ct.c="+ct.v.c);

}

}

运行结果如下:

v1.c=0 v2.c=0

v1.c=27 v2.c=27

v1.c=15 v2.c=15

ct.c=10

v1.c=10 v2.c=10

v1.c=11 v2.c=11

ct.c=11

这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。

关于static使用java和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。