Java关键字ob_java--整理下关于static关键字的知识

本文详细介绍了Java中的`static`关键字的用途,包括静态变量、静态常量、静态方法和静态代码块。静态变量在类级别上共享,不随对象创建而复制。静态常量用于存储不变的值,如Math.PI。静态方法不依赖于对象实例,如Math.pow()。静态代码块在类加载时执行,用于初始化。同时,文章强调了过度使用静态变量可能导致内存泄漏的问题,并给出了main方法为何需要static的例子。
摘要由CSDN通过智能技术生成

如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。--《java核心技术》

使用static的两种情形:1、只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本不创建对象。2、希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。--《java编程思想》

static几个用到的地方:

静态变量:这个不解释。

静态常量:避免每个对象都拷贝一份常量。(这边提醒下自己加了final才是声明常量),通过Math.PI调用

public classMath

{public static final double PI=3.1415926;

}

静态方法:比如Math类中的 Math.pow(x,a),在运算时,不使用任何Math对象,换句话说,就是没有隐式参数(提醒下自己隐式参数指this参数);可以认为静态方法是没有this参数的方法,因此静态方法不能操作对象,所以不能在静态方法中访问实例域,但是,静态方法可以访问自身类中的静态域。

工厂方法:这个来自《java核心技术》,我不太了解NumberFormat,我觉得我看懂了,但我不敢概括,只能截图放着了。

da638d7668f53acda5354815be187e15.png

在《java 8 编程入门官方教程》中还看到了 static 代码块:

具体:有时类在创建对象之前,需要进行一些初始化。例如,可能需要建立与远程站点的连接。也可能需要在使用类的任何static方法之前,初始化某些static变量。为了处理这些情况,java允许声明static代码块。static代码块在类第一次被加载时执行,因此是在使用类之前执行的。可以参考代码

packagetest2;classStaticBlock {static doublerootOf2;static doublerootOf3;static{

System.out.println("Inside static block.");

rootOf2=Math.sqrt(2.0);

rootOf3=Math.sqrt(3.0);

}

StaticBlock(String msg) {

System.out.println(msg);

}

}classSDemo3 {public static voidmain(String args[]) {

StaticBlock ob= new StaticBlock("Inside Constructor");

System.out.println("Square root of 2 is "+StaticBlock.rootOf2);

System.out.println("Square root of 3 is "+StaticBlock.rootOf3);

}

}

abe816b3c93575def555b584c88a7787.png

为什么main方法要加static:main方法不对任何对象进行操作,事实上,再启动程序时没有任何一个对象。静态的main方法将执行并创建程序所需有的对象。--《java核心技术》

另外我还想提醒自己的是:

(17)尽量避免随意使用静态变量

要知道,当某个对象被定义为static的变量所引用,那么gc通常是不会回收这个对象所占有的堆内存的,如:

public class A

{

private static B b = new B();

}

此时静态变量b的生命周期与A类相同,如果A类不被卸载,那么引用B指向的B对象会常驻内存,直到程序终止--来自http://www.cnblogs.com/xrq730/p/4865416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值