黑马程序员技术交流社区
标题:
static的理解和用法
[打印本页]
作者:
焦志鹏
时间:
2012-10-17 17:44
标题:
static的理解和用法
一直在想static应该是什么是时候用,实际项目中有什么情况是用静态就能达到优化的效果呢?
下面是我自己总结的一些关于static的理解,还请高手补充:
1、static可以理解为全局
2、只想调用一个方法,但是不想创建一个对象时,可以用static方法。 ———— 类名调用
通常将一些公用的函数库做成static类和方法
3、被static修饰的成员变量和成员方法独立于该类的任何对象。
也就是说它不依赖类特定的实例,被类的所有实例共享
4、静态方法只能访问静态的成员和变量,但静态方法、静态变量却可以被非静态成员函数调用;
不能与this super同用(不涉及实例)
5、用static函数调用被声明为private的构造函数
private Soup(){}
public static Soup makeSout()
{
return new Soup();
}
作者:
王得新
时间:
2012-10-17 18:01
补充:
什么时候使用static关键字:
1 静态变量,当对象中出现共享数据时,该数据被static修饰,
2 静态函数,当功能内部没有访问到非static数据似乎,那么该功能可以定义成static
注意:
1 静态方法中不可以有this、super关键字,因为静态优先于对象存在,所以静态方法中不可以有this、super
2 非静态内部类中不可以声明static成员
3 在静态内部类中,可以定义static方法,但static方法方法只能引用外部类中的静态成员
作者:
燕国庆
时间:
2012-10-18 10:34
5、用static函数调用被声明为private的构造函数
private Soup(){}
public static Soup makeSout()
{
return new Soup();
}
这个函数可以调用上面的构造函数吗???当static 加载到内存中构造函数是不是还没存在在对内存中?
作者:
王得新
时间:
2012-10-18 15:39
楼主啊,那个海贼的种子吧,我没有,我劝你别看了,那种动漫看着就上瘾,我好不容易才看完的,深有体会!现在是冲击黑马的关键时刻,别想了!海贼一直处于更新中.........等十年后带着孩子一起再看吧!!!
作者:
黑马-zhangping
时间:
2012-10-18 15:55
用static修饰符修饰的属性是仅属于类的静态属性。
最本质特点:它们是类的属性,不属于任何一个类的具体对象。它不保存在某个对象的内存区间中,而是保存在类的内存区域的公共存储单元。换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值;同样任何一个类的对象去修改它时,也都是在对同一个内存单元进行操作。
类的静态属性是该类各个对象的共享变量,便于实现一个类不同对象之间的通信。
static关键字用作成员变量、方法、块和内部类的修饰符。
◆static修饰的成员变量叫做类变量(静态变量)
◆static修饰的方法叫做类方法(静态方法)
静态变量是属于整个类的,它们对于这个类的所有对象来说是惟一的。直接通过类名引用。
实例变量只有在生成实例对象之后才存在,才可以被引用。
也把静态变量称为类变量,非静态变量称为实例变量。
class TestStatic{
static int number=0; //静态变量
int number1=0; //实例变量
TestStatic(){
System.out.println(++TestStatic.number);
}
public static void main(String []args){
TestStatic t;
for(int i=1;i<5;i++){
t=new TestStatic();
System.out.println(++t.number1);
}}}
作者:
草上飞
时间:
2012-10-26 16:56
本帖最后由 安显杰 于 2012-10-26 16:58 编辑
一个静态对象属于一个类,但它不属于实例对象,也不是实例对象状态的一部分.每一个静态变量只存在一份.静态变量通常称为类变量(class variable).在实际中,经常需要这样的一个变量,它被一个类的所有实例对象所共享,如果它同时又是公有的,那么它就可以被这个类的任意访问者所使用.静态变量存在于类的作用域之内.通常声明为private.java中许多时候会用到public static final 这样的变量。
静态变量可以被位于同一个作用域内的任意方或静态方法访问,访问时使用变量名称即可。如果在类作用域以外访问类,则要使用一个含有类名的表达式访问静态变量,例如:
Integer.MAX_VALUE, 其中MAX_VALUE是在类库中声明过的。
静态方法)
静态方法或类方法属于一个而不是属于某个实例对象实现的一部分。可以直接通过类来调用这种方法,而并不是只能由某个特定的实例对象调用。静态的方法不能用abstract声明,而且无论是否明确地指定实际上都是final型的。
静态方法的声明格式:
modifiers static typeName methodName (parameterList){
statementSequence
}
modifiers(可以从public,protect,private中选择一个),后面可以加上final,nativc,synchronized中的一个或几个的组合。
static main是静态方法的一个特殊用法,用static main 方法来建立程序的初始状态,创建一组初始对象,并进行合理的方法调用,使得程序能够继续执行下去,static main方法使用String数组型参数包含了用户在运行时给出的任意命令行参数。
静态初始化器)
静态初始初始化器(static initializer)时一个语句序列,在装入一个类时执行它。我们用它来初始化静态变量,并且苦于完成一个类所需的其他初始化工作。静态变量可以被直接初始化,但是要进行更复杂的初始化,就需要静态初始化器。它提供了一种与实例变量初始化类似的机制。形式:
static{ statementSequence}
作者:
草上飞
时间:
2012-10-26 16:59
这是static的用法
public class nine {
public STATIC void A(int x, int y) {
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
}
public static void main(String args[]){
A(3,6);
A(4,6);
A(6,10);
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2