技术文章-类和对象与构造方法

1.Java是一门面向对象的编程语言,所谓面向对象,就是主张在程序编译中的一切皆为对象,程序用人的思维解决问题。面向对象编程就是在模拟现实生活。

面向对象的程序都是由类组成的,所以类与对象是面向对象编程的基础核心。类也是Java中最基本的单位。

 

而面向对象编程的首要目标就是了解需求中有哪些对象:

对象的定义:一个具体的事物就是一个对象。

生活中的例子:具体的某一台电脑、某一部手机。

 

了解到需要的对象以后,怎样去描述这个对象?

例如:

针对某一台电脑,我们可以用该电脑有哪些外部特征(颜色、尺寸、CPU、显卡等等),还可以描述这台电脑具体可以用来做什么(开机、关机、调节音量等等)。

综上,可以从特征、功能这两方面来描述一台电脑。

 

2.类

定义:类就是拥有与相似特征与功能的对象的集合。

所以,我们可以用特征、功能这两方面来描述一个类。

描述类的特征叫属性,描述类的功能叫方法。

 

Java中定义类的格式:

public class 类名 {

 

                 //属性的格式

                 public 数据类型 属性名;

                

                 //方法的格式

                 public 返回值类型 方法名(数据类型 参数名,...){

                        

                 }

 

        }

 

类是拥有与相似特征与功能的对象的集合,所以类不是具体的,而是抽象的,类好比就是模板,我们想要使用一个对象,只能化用而不能直接使用模板。

所以在Java中,想要使用一个对象,就必须先实例化对象。

实例化对象的关键字:new

        格式:

                 类名 对象名  = new 类名();

如此实例化以后,就可以使用具体对象中的属性与方法了。

调用对象中属性和方法的格式:

                 对象名.属性名

                 对象名.方法名(参数值,...);

例子:定义一个学生类,里面包含姓名、学分属性,包含有学习、游戏方法。在Manager类中定义主函数并赋值属性,调用两种方法。

class Student{

        private String name;

        private int scro=0;

        public void setName(String n){

        name=n;

        }

        public void study(){

        scro++;

        System.out.println(name+"学习中!");

        }

        public void play(){

        scro--;

        System.out.printlin(name+"正在游戏中!");

        }

}

public class Manager{

        public static void main(Srting args[]){

        Student st1=new Student();

        st1.setName("BillGates");

        st1.study();

        Student st2=new Student();

        st1.setName("Jobs");

        st1.study();

        for(int i=0;i<5;i++){

        st2.study();

        }

        st2.play();

        }

}

由此可见,想要使用一个对象,必须首先实例化对象:

Student st1=new Student();

Student st2=new Student();

3.实例化对象的实际分析

实例化对象的格式如下:

类名  对象名  = new 类名();

实际上“=”后的“类名()”是一个构造方法。所以真正的实例化对象格式如下:

类名  对象名  = new 构造方法名(参数值,...);

4.构造方法

一个类中的方法可以大体分为两类——普通方法与构造方法。

普通方法书写格式:

访问修饰符  返回值类型 方法名(数据类型 参数名,...){

                

        }

构造方法书写格式:

        访问修饰符  构造方法名[类名](数据类型 参数名,...){

                

        }

由上可以发现,就书写格式而言构造方法和普通方法的区别是:

1.方法名不同:

构造方法的方法名必须与类名相同,而普通方法的方法名没有这个要求。

2.返回值不同

构造方法不写返回值,而普通方法要注明返回值类型,如果没有返回值还是要写void。

 

普通方法的用途:

(1)用来提供模板以实现具体对象里的行为。

构造方法的用途:

(1)用来实例化对象(由上面实例化对象的例子可以说明);

(2)用来初始化属性值:

People类中:

public People(String name){

                 this.name =name;

        }

主函数中:

People stu= new People("张三");

以上代码实现可以发现,stu对象中name属性拥有初始化了初始化值“张三”。

 

构造方法的注意事项:

(1)构造方法是不能定义返回值类型;

(2)构造方法的名字必须要和类名完全一致;

(3)如果类中没有定义构造方法,Java会默认给你提供一个无参数的构造方法。

针对(3)的说明:

定义一个People类:

public class People{

……

}

类中没有定义构造方法。

现在在主函数中实例化对象:

People stu = new People();

主函数中实例化stu对象,调用了People()这个People类的构造方法。程序没有报错,所以可以发现People类中程序自带了一个People()构造方法。

但是如果在People类中定义了一个含参数的构造方法:

public class People{

public People(String name){

                 this.name =name;

        }

}

在People类中定义含有name参数的构造方法。

主函数中调用:

People stu = new People();

People()会报错,因为People类中已经定义过含参构造方法public People(String name),所以系统不会再自带People()方法。此时调用必须按照类中定义构造方法的格式:

People stu= new People("张三");

加入String参数“张三”。

5.方法的重载

在生活中可能遇见这样的例子:一个人搭乘交通工具从A地前往B地,可能搭乘出租车,也可能搭乘公交车。搭乘的方法都可以抽象为把人从A地送往B地,但是具体的工具出租车与公交车类型不同。

面对这样的情况,在Java中可以用方法重载可以解决。

首先,从上面那个例子可以得出,想要使用方法重载的条件是:

(1)方法名完全一致;(都是搭乘交通工具从A到B)

(2)方法所带的参数不同(参数个数,参数类型,参数顺序)。(车辆的类型不同)

 

在什么情况下用方法重载?

构造方法:

初始化初始值不同的对象。

例如,在People类中重载多种构造方法:

public People(){

}

public People(String name){

        this.name =name;

}

在主函数中实例化对象:

People stu1 = new People();

People stu2 = new People("张三");

都不会报错,即实现了初始化不同值的对象。

普通方法:

需要调用参数不同的同种方法体的方法,People类中:

protected void study() {

                 score++;

                 System.out.println(name + "在学习中,学分是" + score);

        }

        public int study(String str) {

                 System.out.println(name+"在学习"+str+"中");

                 return 0;

        }

在主函数中可以调用:

stu1.study();

stu2.study("Java");

含有参数和没含参数的同种方法,实现不同的运行结果。

而方法重载的调用,会根据你给予的参数来决定。

6.this关键字

当使用Java编程时,会遇到这样的情况:

public People(String name,int score){

                 name = name;

                 score = score;

        }

方法中带有参数,但是参数的名字恰好与类中定义的属性名相同。Java会采用就近原则,默认都当做是参数,所以编程时需要来区分它们,上this.就可以表示是属性,没有加的则表示参数。如:

public People(String name,int score){

                 this.name = name;

                 this.score = score;

        }

 

This关键字的特殊用法:

People类中定义两个构造方法:

public People(){

                 this("无名");

        }

       

        public People(String name){

                 this.name =name;

        }

主函数中实例化对象:

People stu = new People();

结果发现,运行结果stu对象的默认name为“无名”。

观察以上例子可以发现:

this(参数值,...);

实则是调用带对应参数的构造方法。防止用户在实例化对象时忘记给属性设置初始值。

 

注意:this关键字表示的是当前对象。

posted @ 2016-07-16 15:25  米瑞蔻马  阅读(163)  评论(0编辑  收藏  举报