Java基础:第三十二讲 静态成员
2010-01-15 16:29
204 查看
Java是面向对象的语言,在开发的时候要以对象的方式来组织代码,方法和属性应该属于某个对象,而不是独立存在。
在Java中还存在一类方法和属性,不属于某个具体对象,而是多个对象共享的,称为静态方法或者静态属性。
1、静态属性
静态属性是某个类的所有对象共享的属性,通过static关键字定义。下面的代码定义了一个静态属性:
public Class Person(
public static int count;
)
要访问静态属性,可以通过对象名,还可以通过类名。下面的代码都是正确的:
方式一:
Person.count = Person.count+1;
方式二:
Person person = new Person();
person.count++;
这与非静态成员是不同的,非静态成员只能通过对象名调用,每个对象都有自己对应的属性,例如张三有自己的身高,李四有自己的身高。因为静态成员是对应到类的,而非静态成员是对应到对象的,每个对象都会有一个。假设,Person类实例化了6个对象,对于静态成员,内存中只有一个空间来保存这个属性,而非静态成员会有6个,每个对象一个。所以,静态成员又称为类成员,非静态成员称为对象成员。
实例:写出下面代码的输出结果
Person p1 = new Person();
p1.count=10;
Person p2 = new Person();
p2.count=20;
System.out.println(p1.count);
System.out.println(p2.count);
答案:20 20鼠标选中查看答案。
2、静态方法
静态方法属于类的方法,不属于某个具体对象的,所以静态方法不能访问非静态成员。
静态方法的定义,使用关键字static,下面定义了一个静态方法,对count进行操作:
public static void setCount(int count){
Person.count = count;
}
public static int getCount(){
return count:
}
实际上,大家在课程已开始的时候就已经使用静态方法了,记不记得main方法的定义?
静态方法不能访问非静态属性,下面的代码就是错误的:
public int height;
public static int getHeight(){
return height;
}
问题:什么时候用静态方法呢?
答案:如果方法执行过程中不使用对象的属性(也就是非静态成员变量),只是用静态成员变量或者通过参数传入的信息,这时候方法的处理过程与对象无关,所以可以设置成静态方法,并且应该设置成静态方法。
鼠标选中查看答案。
3、静态初始化器
构造方法用于对成员变量进行初始化,静态成员变量不属于某个对象,如何对静态成员变量进行初始化呢?使用静态初始化器。下面就是一段静态初始化器代码:
static{
count=0;
}
static引导的一对大括号,括号中包含对静态成员的初始化代码,这就是静态初始化器,可以认为是比较特殊的方法,没有返回值类型,没有参数,没有方法名,因为它是在加载类的时候调用的。
注意:静态初始化器中只能对静态成员进行操作,不能对非静态成员进行操作。
下一次介绍一个简单的面向对象的例子。
上一次: 第三十一讲 常量成员
下一次: 第三十三讲 父类与继承
李绪成 CSDN Blog:http://blog.csdn.net/javaeeteacher
邀请您为好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5
在Java中还存在一类方法和属性,不属于某个具体对象,而是多个对象共享的,称为静态方法或者静态属性。
1、静态属性
静态属性是某个类的所有对象共享的属性,通过static关键字定义。下面的代码定义了一个静态属性:
public Class Person(
public static int count;
)
要访问静态属性,可以通过对象名,还可以通过类名。下面的代码都是正确的:
方式一:
Person.count = Person.count+1;
方式二:
Person person = new Person();
person.count++;
这与非静态成员是不同的,非静态成员只能通过对象名调用,每个对象都有自己对应的属性,例如张三有自己的身高,李四有自己的身高。因为静态成员是对应到类的,而非静态成员是对应到对象的,每个对象都会有一个。假设,Person类实例化了6个对象,对于静态成员,内存中只有一个空间来保存这个属性,而非静态成员会有6个,每个对象一个。所以,静态成员又称为类成员,非静态成员称为对象成员。
实例:写出下面代码的输出结果
Person p1 = new Person();
p1.count=10;
Person p2 = new Person();
p2.count=20;
System.out.println(p1.count);
System.out.println(p2.count);
答案:20 20鼠标选中查看答案。
2、静态方法
静态方法属于类的方法,不属于某个具体对象的,所以静态方法不能访问非静态成员。
静态方法的定义,使用关键字static,下面定义了一个静态方法,对count进行操作:
public static void setCount(int count){
Person.count = count;
}
public static int getCount(){
return count:
}
实际上,大家在课程已开始的时候就已经使用静态方法了,记不记得main方法的定义?
静态方法不能访问非静态属性,下面的代码就是错误的:
public int height;
public static int getHeight(){
return height;
}
问题:什么时候用静态方法呢?
答案:如果方法执行过程中不使用对象的属性(也就是非静态成员变量),只是用静态成员变量或者通过参数传入的信息,这时候方法的处理过程与对象无关,所以可以设置成静态方法,并且应该设置成静态方法。
鼠标选中查看答案。
3、静态初始化器
构造方法用于对成员变量进行初始化,静态成员变量不属于某个对象,如何对静态成员变量进行初始化呢?使用静态初始化器。下面就是一段静态初始化器代码:
static{
count=0;
}
static引导的一对大括号,括号中包含对静态成员的初始化代码,这就是静态初始化器,可以认为是比较特殊的方法,没有返回值类型,没有参数,没有方法名,因为它是在加载类的时候调用的。
注意:静态初始化器中只能对静态成员进行操作,不能对非静态成员进行操作。
下一次介绍一个简单的面向对象的例子。
上一次: 第三十一讲 常量成员
下一次: 第三十三讲 父类与继承
李绪成 CSDN Blog:http://blog.csdn.net/javaeeteacher
邀请您为好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5
相关文章推荐
- JAVA基础初探(四)JAVA封装、包的概念及使用、访问修饰符、this关键字、内部类(成员,静态,方法,匿名)
- Java基础知识---【静态成员,封装性,包】------2015年3月6日
- java基础,静态变量,静态初始化块,初始化快,成员变量的初始化顺序
- java 基础 面向对象(多态中的成员访问特点之静态成员成员方法)
- Java基础——Static修饰符+静态相关+帮助文档制作+对象初始化_调用成员过程+单例设计
- java静态方法与成员方法及成员变量的区分
- 黑马程序员——java基础之this与静态
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- 【13】Java基础:java中的静态代码块,静态变量,静态方法
- c++基础学习8-类的静态成员
- java中静态成员与非静态成员之间的访问关系
- java--实例成员 & 静态成员
- JNI基础(七)C调java静态方法代码
- 04 java类的继承和静态公有成员
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- java基础之static(静态)
- C++基础(二)C/C++中的静态、非静态成员函数、变量
- Java基础-内部类-为什么成员内部类可以无条件访问外部类
- main()方法为啥必须要public static void类型的??java中的静态成员