初学者---简介java中的对象和类(2)
来源:互联网 发布:parallels mac 破解版 编辑:程序博客网 时间:2024/06/06 09:30
上一节中我们简单介绍了类和对象,以及怎么通过类来定义对象,和如何来调用对象的方法
http://blog.csdn.net/w865629524/article/details/77062932
接下来我们介绍类中的静态变量和常量,以及方法中的静态方法和实例方法
我们知道,每个类都有一个由变量组成的数据域,而且每个对象的数据域是独立的,也就是说liLei的age和hanMeiMei的age虽然名字都叫age,但因为他们是两个不同对象的变量,所以他们是不同的。那我们有没有什么办法可以让每个类共用一些变量呢?比方说我们想知道在我们的程序里面有几个人,也就是对People类建立了多少个对象,那该怎么办呢?
这就要用到我们的静态变量,静态变量被类中的所有对象所共享,意思就是说,如果People类中有这样一个静态变量,那么liLei和hanMeiMei会共用这个变量,通过对象liLei对这个变量的操作,会影响到hanMeiMei中这个变量的值。那我们怎样来声明一个静态变量呢?只需要在变量的声明中加上修饰符static。
举一个简单的例子:
public class People {//int age;static int sumOfPeople = 0;People() {//age = 0;sumOfPeople++;}People(int nowAge){//age = nowAge;sumOfPeople++;}//void growUp() {//age++;//}//int getAge() {//return age;//}//void printAge() {//System.out.println(age);//}int getSumOfProple() {return sumOfPeople;}}在这个例子中,我们给People类定义了一个静态变量sumOfPeople,每次创建对象时都让他加一,这样就能达到统计对象数的效果。
在类中的常量应该是被类的所有对象所共享的,因此在固有常量的定义上还要加上一个修饰符static,例如在Math类中的PI就是一个常数,他被定义为
final static double PI = 3.14159265358979323846;
介绍完静态变量和常量,再来介绍一下实例方法和静态方法。
首先要明确,实例方法的意思,就是必须根据一个特定的对象才能进行的方法,比如我要求一个圆的周长,不同圆有不同的周长,那么我求圆的周长这个方法是依赖于某一个圆而存在的,这种方法就是实例方法。另一种方法叫做静态方法,静态方法就是不依赖一个具体的对象,可以直接调用的方法,我们熟悉的Math类中的所有方法都是静态方法。
下面是一个例子:
public class Circle {double radius;static int numOfCircle = 0;final static double PI = 3.14;Circle() {radius = 1;numOfCircle++;}Circle(double newradius) {radius = newradius;numOfCircle++;}static int getNumberOfCircle() {return numOfCircle;}double getArea() {return PI*radius*radius;}}例中,numOfCircle表示圆的数量,是一个静态变量,getNumberOfCircle是一个静态方法,他直接返回圆的个数,getArea是一个实例方法,他求出一个具体的圆的面基。
在使用实例方法和静态方法时,我们要注意一个细节:静态方法不能访问实例方法和实例数据域,比方说把这里numOfCircle前面的static去掉,使它成为一个实例变量,那么getNumberOfCircle就会产生一个错误,因为静态方法不能调用实例变量。但是反过来,实例方法是可以调用静态的方法和数据域的。
既然我们已经知道了该怎么设计一个带有实例方法和静态方法的类,那我们怎么来调用实例方法和静态方法呢?
因为实例方法需要基于一个特定的对象才能使用,所以我们直接在对象后用“.”点运算符去调用实例方法就可以了。但是静态方法不依赖于对象,那我们怎么做呢?我们可以回顾一下我们是怎么调用Math类中的方法的,然后我们就知道,调用静态方法,需要在类名后用“.”点运算符来调用静态方法,比如Math.sin(),静态变量也是如此,比如Math.PI.
下面是一个具体调用实例方法和静态方法的例子:
public class Test {public static void main(String[] args) {Circle c1 = new Circle();Circle c2 = new Circle(2);double maxArea = c1.getArea();if( maxArea < c2.getArea() ) {maxArea = c2.getArea();}System.out.println("there are "+Circle.getNumberOfCircle()+" circles");System.out.println("the max Area between c1( radius = "+c1.radius+" ) and c2 ( radius = "+c2.radius+" ) is "+maxArea);}}public class Circle {double radius;static int numOfCircle = 0;final static double PI = 3.14;Circle() {radius = 1;numOfCircle++;}Circle(double newradius) {radius = newradius;numOfCircle++;}static int getNumberOfCircle() {return numOfCircle;}double getArea() {return PI*radius*radius;}}
- 初学者---简介java中的对象和类(2)
- 初学者---简介java中的对象和类(1)
- 初学者---简介java中的对象和类(3)
- 关于初学者如何理解面向对象和面向过程的区别以及java中的类和对象
- java中的类和对象(一)
- JAVA中的接口和抽象类(加深初学者理解)
- Java初学者入门简介
- java中的类和对象
- JAVA中的对象和类
- Java中的类和对象
- java中的类和对象
- Java中的对象和类
- Java中的类和对象
- JAVA中的类和对象
- Java中的类和对象
- Java中的类和对象
- java 中的类和对象
- Java中的类和对象
- java线程池
- Flink 入门
- 【转载】Web移动端Fixed布局的解决方案
- trap or not 对于link 时产生的不同的错误信息
- String、StringBuffer与StringBuilder之间区别
- 初学者---简介java中的对象和类(2)
- [Git] 修改之前某次 commit 日志和内容
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
- C#使用ftp
- C. Dima and Salad----01背包
- kotlin基本语法
- 小程序中跳转的实现和url传递参数
- MongoDB 同步 Hive 的两种方式
- easyui-combobox 加载完数据后默认选择其中项