static可以修饰属性和方法
传统属性所具备的特征:保存在堆内存中,且每个对象独享属性
1.static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行数据区的访问
访问static属性(类属性)应使用类名称.属性名。
2.所有的非static属性(实例变量)必须在对象实例化后使用,而static 属性(类属性)不受对象实例化控制
3.使用static定义的方法,直接通过类名称访问,所有的static方法不允许调用非static定义的属性或方法。所有的非static方法允许访问static方法或属性
使用static定义方法只有一个目的:某些方法不希望受到类的控制,即可以在没有实例化对象的时候执行(广泛应用与工具类中)
以下代码涉及static和private的相关知识的综合应用。
class Singleton{
//Singleton instance=new Singleton();在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象
//instance对象(属性)是一个普通属性,所有的普通属性必须在实例化对象的时候才能进行内存空间的分配而现在外部无法产生实例化对象所以必须想一个办法,
//可以在Singleton没有实例化对象产生,也可以将instance进行使用。 static关键字
private static Singleton instance=new Singleton();
private Singleton() {
}
public static Singleton getInstance() {//即使取得了Singleton类的实例化对象,但是对于类中属性应该使用private进行封装,用getter()方法取得,由于
return instance;//此时访问的是static属性,并且这个类无法在外部提供实例化对象,因此应该提供一个static的getter()方法,因为static方法也不受对象
//对象实例化控制。
}
public void print(){
System.out.println("HelloWorld");
}
}
public class Testdemo{
public static void main(String[] args) {
Singleton singleton=null;
singleton=Singleton.getInstance();
singleton.print();
}
}
//如果类中已经明确的提出了一个私有的构造方法,那么默认生成的无参构造不再产生,此时对对象实例化的时候一定会有错误。一旦构造方法被私有化了,表示外部无法调用
//构造方法即外部不能够产生新的实例化对象。此时类是一个相对而言封闭的状态。
//但是如果继续调用类中的普通方法,必须提供实例化对象。考虑到封装的特点,可以在类的内部产生一个实例化对象
传统属性所具备的特征:保存在堆内存中,且每个对象独享属性
1.static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行数据区的访问
访问static属性(类属性)应使用类名称.属性名。
2.所有的非static属性(实例变量)必须在对象实例化后使用,而static 属性(类属性)不受对象实例化控制
3.使用static定义的方法,直接通过类名称访问,所有的static方法不允许调用非static定义的属性或方法。所有的非static方法允许访问static方法或属性
使用static定义方法只有一个目的:某些方法不希望受到类的控制,即可以在没有实例化对象的时候执行(广泛应用与工具类中)
final关键字
在java中final被称为终结器,可以使用final来定义类,方法,属性。1.使用final定义的类不能有子类(String类便是使用final定义的)
final class A{ } A类不能有子类
2.使用final定义的方法不能被子类所覆写。
class A{
public final void fun()
}
3.使用final定义的变量是常量,在声明是赋值,且不能被修改
public final int LEVEL_A=100;
在开发中如果要定义常量,常量全用大写字母,多个单词以_分隔。
以下代码涉及static和private的相关知识的综合应用。
class Singleton{
//Singleton instance=new Singleton();在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象
//instance对象(属性)是一个普通属性,所有的普通属性必须在实例化对象的时候才能进行内存空间的分配而现在外部无法产生实例化对象所以必须想一个办法,
//可以在Singleton没有实例化对象产生,也可以将instance进行使用。 static关键字
private static Singleton instance=new Singleton();
private Singleton() {
}
public static Singleton getInstance() {//即使取得了Singleton类的实例化对象,但是对于类中属性应该使用private进行封装,用getter()方法取得,由于
return instance;//此时访问的是static属性,并且这个类无法在外部提供实例化对象,因此应该提供一个static的getter()方法,因为static方法也不受对象
//对象实例化控制。
}
public void print(){
System.out.println("HelloWorld");
}
}
public class Testdemo{
public static void main(String[] args) {
Singleton singleton=null;
singleton=Singleton.getInstance();
singleton.print();
}
}
//如果类中已经明确的提出了一个私有的构造方法,那么默认生成的无参构造不再产生,此时对对象实例化的时候一定会有错误。一旦构造方法被私有化了,表示外部无法调用
//构造方法即外部不能够产生新的实例化对象。此时类是一个相对而言封闭的状态。
//但是如果继续调用类中的普通方法,必须提供实例化对象。考虑到封装的特点,可以在类的内部产生一个实例化对象