如果想要将一个属性设置为公共属性,就要用static修饰。static修饰的内容在公共的全局数据区。
所有的对象都指向全局数据区。
静态属性可以通过类名称直接调用:类名称.静态属性
静态方法可以通过类名称直接调用:类名称.静态方法()
静态方法只能调用静态属性或调用静态方法,不能调用非静态的方法或属性。
使用静态方法时需要注意:
静态的方法只能调用静态的方法或静态的属性;非静态的属性和方法可以调用静态的属性和静态的方法;静态属性和方法可以在没有实例化对象的时候调用,而类中普通方法和普通属性,肯定只有在对象实例化之后才能调用。
如果主方法中要想直接调用方法,那么方法就必须有static关键字。
public class StaticDemo05{
public static void main(String args[]){
fun() ;
}
public static void fun(){
System.out.println("Hello World!!!") ;
}
};
如果没有static那么方法就要通过对象来调用。
public static void main(String args[])
public:表示最大权限
static:静态可以由类名称直接调用,表示可以由类名称直接调用
void:表示没有返回值
String args[]:表示在java 命令中设置参数,java 类名 参数1 参数2 参数3
此形式输出的每个参数自动换行输出
若想在接收的参数连接在一起输出,则将参数使用双引号括起来,表示一个完整的参数。
程序的内存分为:
栈内存:对象名称,实际上时对象对堆得引用地址
堆内存:属性的内存空间
全局代码区:保存所有的操作方法
全局数据区:保存所有的static属性。
十一,程序分析,static相关应用,对象数组
(1)对象数组
主方法中不能编写过多的代码
对象数组:就是包含了一组对象
动态声明对象数组:类名称 对象数组名称[]=new 类名称[长度]
声明后对象数组中的堆空间是空,然后使用循环对数组进行实例化。
静态初始化对象数组:类名称 对象数组名称[]={new 类名称(参数),new 类名称(参数)}
(2)构造方法私有化
构造方法有权限
使用private关键字可以声明构造方法,但是声明后外部就无法直接进行对象的实例化操作。
若想在外部依然进行构造方法,则私有的方法能在类中的另外一个方法中调用,然后在外部调用这个方法即可,若想调用私有方法则必须在类中创建一个对象。如果一个类只能有一个实例化对象的话,包含构造方法的方法必须是静态的,那么类中调用私有方法的对象也要是静态的。
class Single{
private static Single instance = new Single() ;
private Single(){ // 将构造方法私有化
}
public static Single getInstance(){
return instance ;
}
public void print(){
System.out.println("hello world!!!") ;
}
};
public class SingleDemo{
public static void main(String args[]){
Single s = null ; // 声明对象
s = Single.getInstance() ; // 实例化对象
s.print() ;
}
};
如上成为单例设计。
(3)static的相关应用
static修饰的方法在公共代码区或属性在公共数据区。
class Person{
private String name ;
private static int count ;
public Person(){
count++ ;
this.name = "NONAME - " + count ; // 通过"NONAME"自动命名
}
public Person(String name){
this.name = name ;
}
public String getInfo(){
return "姓名:" + this.name ;
}
};
public class StaticDemo08{
public static void main(String args[]){
System.out.println(new Person().getInfo()) ;
System.out.println(new Person("A").getInfo()) ;
System.out.println(new Person("B").getInfo()) ;
System.out.println(new Person().getInfo()) ;
}
};