0基础学Java(1)面向对象编程教程——类与对象、构造方法

        面向对象编程又叫做面向对象的程序设计(Object Oriented Programming,即OOP)是一种计算机编程架构。面向对象编程,以对象为核心,将现实中的实体抽象为需要解决的问题中的对象,需要根据所需用的对象在Java中设计对应的类,Java中所有的代码都是以类的形式存在。

一.类与对象

1.1类与对象的概念

1.1.1类与对象

        类指具有相同属性和方法的一组对象的集合。类指的是某一类事物的统称;类中的某一个特定的物叫做对象。例如,学生李华,学生就是类,而李华则是学生类中的一个特定的个体,因此李华就是对象。

1.1.2定义类的方法

        在Java中new一个新的class,在定义class时系统提示输入的name即类名,在创建好一个Student类之后Java中会自动生成如下代码:这时就完成了一个类的创建。

public class Student {

}

1.2类的组成

        类由两个部分组成,分别是属性和方法

1.2.1属性

        属性,用来描述类中对象的特征。例如学生类,作为学生它可能具有的特征(属性)是姓名、学分、学号...

        那么,如何定义属性呢?格式是:访问修饰符(public) 数据类型 属性名;如下所示:定义学生类的名字、学分属性。

public class Student {
	//定义属性的格式:访问修饰符(public) 数据类型 属性名;
	//定义学生的名字,学分属性
	public String name;//名字属性
	public int score;//学分属性
}

        当然,访问修饰符不止public一种。public是指公有属性,表示该属性是公开的;注意一个Java中文件中可以定义多个类,但是被public修饰的类只能有一个。

        访问修饰符还有private,表示私有的;该属性只能在自己的类中使用;default,是Java默认修饰符,当没有写访问修饰符时,会默认修饰符为default;protected,表示受保护的。

1.2.2方法

        方法,用来描述对象可以展开的行为。例如,李华(对象)可以通过学习(学习,为方法)增加学分(学分,为属性)。

        如何定义方法呢?格式是:public 返回值类型(void就是没有返回值,表示空) 方法名(参数类型 参数名,,,){方法体...}一个方法中可以有多个参数,也可以没有参数。

public class Student {
	
	public String name;
	public int score;
	  
	//方法(函数):行为    
    //格式:public 返回值类型 方法名(参数类型 参数名,,){  方法体...}
	//定义学生的学习方法

	public void study(int sco) {
		//让学生的学分累加
		score += sco;  // score += sco 等价于  score = score + sco
		//输出语句   ln表示换行
		System.out.println(name+"正在学习,学分增加了"+sco+"分,现在学分是"+score);
	}

1.3如何调用类中的属性和方法

        调用类的属性和方法需要通过对象在主函数中来调用。因此调用类的属性和方法的第一步是在主函数中创建对象,然后通过对象调用属性和方法。

    //主函数
	public static void main(String[] args) {
		
        //在主函数中,类里面的属性和方法必须通过对象调用


		//创建Student类的对象   格式:类名 对象名 = new 类名();
		Student lh = new Student();
        

        //调用属性:对象名.属性名 = 值;
		lh.name = "李华";
		lh.score = 80;


		//调用方法:对象名.方法名(参数,,);
		lh.study(5);
	}

        创建类的对象的格式:类名 对象名 = new 类名()

        对象调用属性的格式:对象名.属性名 = 值

        对象调用方法的格式:对象名.方法名(参数,,)

二.构造方法

2.1构造方法的基本知识

2.1.1构造方法的概念及作用

        类中的方法分为一般方法与构造方法,其中一般方法就是笔者在上文提到的类的方法。那么什么是构造方法呢?构造方法是有两点,分别是创建对象与初始化属性。在Java中,任何变量在被使用前都必须先设置初值,如果没有赋值,则会为其进行隐性赋值。Java提供了为类的属性赋初值的专门方法——构造方法。

public static void main(String[] args) {
		//创建对象    格式:类名 对象名 = new 构造方法;
		Student st = new Student();
}

        我们发现在前面创建对象的时候,其实我们已经用到了构造方法,可以体现构造方法创建对象与初始化属性的作用。

2.1.2构造方法的特点

        构造方法没有返回值类型,这里不是要写成void,而是直接不写。

        构造方法的方法名必须是类名。

        每个类都有一个默认的无参构造方法,当自己定义构造方法,那么默认的无参构造方法就会被替代。
        构造方法可以有多个。

2.1.3如何定义构造方法

       定义构造方法的格式: public 类名(参数类型 参数名,,){  方法体...}

       构造方法的示例:

public class Student {
	//属性
	private String name;
	private int score;
	
	//一般方法的格式:public 返回值类型 方法名(参数类型 参数名,,){  方法体...}
	//构造方法的格式:public 类名(参数类型 参数名,,){  方法体...}
	//构造方法中1.没有返回值类型  2.方法名必须类名
    

    //默认的无参构造方法
    public Student() {

    }
	//每个类都有一个默认的无参构造方法,当自己定义构造方法,那么默认的无参构造方法就会被替代
   
	
    //自定义的构造方法
    //构造方法的方法重载
    public Student(String name,int score) {
		this.name = name;
		this.score = score;
	}
}

        在一个类中,有多个方法名重名,但参数的类型、个数或顺序不一样时,这类方法就叫方法重载。我们可以发现上面给出的实例代码中两个构造方法,方法名相同,但是参数类型、个数不同,这就是方法重载,构造方法是支持方法重载的。

2.2构造方法与set函数

public class Student {
	    
    //构造方法,初始化属性
    public Student(String name) {
		this.name = name;
	}
	
	//定义set方法,初始化属性
	public void setName(String name) {
		this.name = name;
	}
}

        我们发现在上面这两段代码中,构造方法与set方法都起到了初始化属性的作用,即这两种方法都能给name赋值,那么这两种方法有什么区别呢?

        ①调用的时间不同

        构造方法是创建对象时自动调用的;set方法是对象创建完成之后手动调用的。

        ②调用的主体

        构造方法是自动调用的;set方法是通过对象名手动调用的。

        ③调用次数

        构造方法在对象的初始化时只能自动调用一次;set方法可以调用多次

2.3构造方法的相互调用

2.3.1this的使用

        this表示本类对象“我”,例如在下面这个代码中,如何区分set函数中所给出的两个name谁是属性、谁是参数呢;无法确定。因此会自动识别两个name都是参数,那这个方法就是无意义的。

private String name;

public void setName(String name) {
		name = name;
	}

        这时我们就会用到this来帮助区分;当我们利用this把这段代码修改成如下格式时:

private String name;

public void setName(String name) {
		this.name = name;
	}

        这时,代码中的this.name就中的name就代表了对象的属性name;而等号右边的name则表示的是这个方法中的参数。

2.3.2构造方法的相互调用

        通过this来实现了构造方法的相互调用,如下所示的实例代码中,利用this在第二个构造方法中调用第一个构造方法给name、score属性初始化。相互调用的格式,this(参数,,,);this构造方法的相互调用,这句代码必须写在方法的第一句。要注意它调用的那个构造方法里的参数,在this这个代码中需要全部写出来。如下文this(“张三”,60);如果只写this(60)就会报错(在只有这两个构造方法的前提下)。

public Student(String name,int score) {
        this.name = name;
		this.score = score;
    }

public Student() {
        //构造方法相互调用:this(参数,,);
		//这句代码必须写在方法的第一句
		this("张三",60);
	}

  完结,撒花~~如有问题欢迎指正交流!!蟹蟹!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值