Java笔记09——类和对象

面向对象的两个要素:类和对象
类:是对一类事物的描述,是抽象的,概念上的定义。
对象:实际存在的某类事物的个体,也称为实例(instance)。

属性: 类中的成员变量
行为:类中的成员方法


生活中描述事物无非就是描述事物的属性和行为。如:人有身高、体重等属性,有说话、唱歌、打篮球等行为。


一、类和对象的使用
  • 创建类,设计类的成员
  • 创建类的对象
  • 通过“对象.属性”和“对象.方法”调用对象的结构

创建一个类:Person.java

类中定义了类的属性:姓名和类的方法:吃饭、睡觉。

package com.java.study;

public class Person {
	//属性
	String name;//姓名
	
	//方法
	
	//吃饭
	public void eat() {
		System.out.println(this.name + "吃饭");
	}
	//睡觉
	public void sleep() {
		System.out.println(this.name + "睡觉");
	}
	
}

创建一个测试类:PersonTest.java

创建一个Person类对象,并调用类的属性和方法。

//创建类的对象 = 类的实例化
		
//创建一个Person类的对象
Person p1 = new Person();
		
//调用对象的属性和方法
		
//调用属性
//姓名赋值为“小明”
p1.name = "小明";
		
//调用方法
//吃饭
p1.eat();
//睡觉
p1.sleep();
		
Person p2 = new Person();
		
//姓名赋值为“小章”
p2.name = "小章";
		
//调用方法
//吃饭
p2.eat();
//睡觉
p2.sleep();

运行结果:

小明吃饭
小明睡觉
小章吃饭
小章睡觉

注意:如果创建了一个类的多个对象,则每个对象都独立拥有一套类的属性(非静态)。
例如:小明长大了,改名为大明。

//小明改名大明
p1.name = "大明";
//调用方法
//吃饭
p1.eat();
//睡觉
p1.sleep();

运行结果:

大明吃饭
大明睡觉
2. 对象间的赋值
//对象间的賦值
Person p3 = new Person();		
p3 = p1;
//调用方法
//吃饭
p3.eat();
//睡觉
p3.sleep();

运行结果:

大明吃饭
大明睡觉

将p1变量保存的对象地址赋给p3,p1和p3指向了堆内存区的同一个对象实体。
在这里插入图片描述

二、类的成员——属性
属性(成员变量)和局部变量
  • 属性直接定义在类的一对{}内;局部变量声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
  • 属性随着类的实例化产生,通过对象.属性调用,局部变量只在某个局部作用域中生效。
  • 属性在其声明时可以指定其权限,使用权限修饰符。常用的权限修饰符:private、public、缺省、protected;局部变量不可以使用权限修饰符。
  • 属性有默认初始化值:
    整型(byte short int long): 0
    浮点型(float double): 0.0
    字符型(char):‘0’或(’\u0000’)
    布尔型(boolean):false
    引用类型:null
    局部变量没有默认初始化值,在使用局部变量时,一定要先显示赋值。特别地,形参在调用时赋值即可。
  • 属性加载在堆内存区(非static);局部变量加载到栈内存区。

示例代码:User.java

package com.java.study;

public class User {
	String food;
	
	public void eat(String food) {//food:局部变量
		System.out.println("吃" + food);
	}
	public void eat() {//food:成员变量
		System.out.println("吃" + this.food);
	}
	public void drink() {//drink:局部变量
		String drink = "雪碧";
		System.out.println("喝" + drink);
	}
}

UserTest.java

package com.java.study;

public class UserTest {

	public static void main(String[] args) {
		User user = new User();
		
		//成员变量
		user.food = "面条";
		user.eat();
		
		//局部变量
		//作为形式参数
		String food = "米饭";
		user.eat(food);
		
		//方法内变量
		user.drink();

	}

}

运行结果:

吃面条
吃米饭
喝雪碧
三、类的成员——方法

方法:描述类具有的功能。


1. 方法的声明

格式:权限修饰符 返回值类型 方法名(形参列表){方法体}

public void eat() {

}

public void sleep(int hour) {

}

public String getName() {
    return name;
}

public String getNickname(String name) {
	return name;
 }
2. 返回值
  • 如果方法有返回值。则必须在方法声明时指定返回值的类型。同时,方法中需要使用return关键字来返回指定类型的变量或常量:“return 数据”
  • 如果方法没有返回值,则方法声明时,使用void来表示。在没有返回值的方法中,一般不使用return,如果要使用的话,只能"return;",表示结束此方法的意思。
3. 方法名

属于标识符,遵循标识符的规则和规范,方法名命名应“见名知意”。

4. 形参列表

方法可以声明0个到多个形参。
格式:数据类型1 形参1, 数据类型2 形参2,…

5. 方法体

方法功能的体现。

6. 方法的重载(overload)

概念:在一个类中,定义多个同名的方法。但要求每个方法具有不同的参数的类型或参数的个数。“同名不同参,返回值无关”


例如:整型数值求和与浮点型数值求和
Overload.java

package com.java.study;

public class Overload {
	
	//下面两个方法构成了重载
	
	//整型求和
	public int getSum(int i,int j) {
		return i + j;
	}
	//浮点型求和
	public double getSum(double i,double j) {
		return i + j;
	}
}

OverloadTest.java

package com.java.study;

public class OverloadTest {

	public static void main(String[] args) {
		Overload ol = new Overload();
		//整型求和
		System.out.println(ol.getSum(1,2));
		//浮点型求和(自动类型转换)
		System.out.println(ol.getSum(1,2.0));
		System.out.println(ol.getSum(1.0,2));
		System.out.println(ol.getSum(1.0,2.0));

	}

}

运行结果:

3
3.0
3.0
3.0
7. 可变个数形参
  • 格式:数据类型 . . .变量名
  • 当调用可变个数形参的方法时,传入的参数个数可以是0个到多个
  • 可变个数形参在方法的形参中,必须声明在末尾
8. 方法参数的值传递机制

形参:方法声明时的参数
实参:方法调用时实际传给形参的参数


Java里的方法传递方式只有一种:值传递。 即将实际参数值得副本传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参。
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参。

下面举一个经典的例子:

package com.java.study;

public class SwapTest {

	public static void main(String[] args) {
		//基本数据类型
		int m = 10;
		int n = 20;
		System.out.println("交换前:m=" + m + "  n=" + n);
		swap(m,n);
		System.out.println("交换后:m=" + m + "  n=" + n);
		
		//引用数据类型
		Swap sp = new Swap();
		sp.a = 10;
		sp.b = 20;
		System.out.println("交换前:" + "a=" + sp.a + "  b=" + sp.b);
		swap(sp);
		System.out.println("交换后:" + "a=" + sp.a + "  b=" + sp.b);

	}
	public static void swap(int m,int n) {
		int temp = m;
		m = n;
		n = temp;
	}
	public static void swap(Swap sp) {
		int temp = sp.a;
		sp.a = sp.b;
		sp.b = temp;
	}

}

运行结果:

交换前:m=10  n=20
交换后:m=10  n=20
交换前:a=10  b=20
交换后:a=20  b=10

在这里插入图片描述

四、类的成员——构造器

构造器也叫构造方法。方法名与类名相同,无返回值。


1. 作用

用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

2. 说明
  • 如果没有显示的定义类的构造器,系统默认提供一个无参构造。
  • 定义构造器的格式:权限修饰符 方法名(参数列表){}

Constructor.java

package com.java.study;

public class Constructor {
	String name;
	//无参构造
	public Constructor() {
		
	}
	//带参构造
	public Constructor(String name) {
		this.name = name;
	}
}

ConstructorTest.java

package com.java.study;

public class ConstructorTest {

	public static void main(String[] args) {
		//构造方法创建并实例化对象
		Constructor c = new Constructor("小明");
		System.out.println(c.name);
		
	}
}

总结
本篇内容
  • 介绍了类和对象
  • 简述了类的三个成员属性、方法、构造器
下篇内容

封装、继承、多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值