Bootstrap

Java面向对象笔记(一)类和对象

Java面向对象笔记(一)类和对象

一、Java面向对象学习的三条主线

  1. Java类及类的成员:属性方法构造器代码块内部类
  2. 面向对象三大特征:封装性继承性多态性、(抽象性)
  3. 其他关键字:this、super、static、final、abstract、interface、package、import等

二、 面向过程(POP) 与 面向对象(OOP)

  1. 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
  2. 面向对象:将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

三、面向对象的两个要素:

  • 类:对一类事务的描述,是抽象的、概念上的定义
  • 对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
  • 面向对象程序设计的重点是类的设计
  • 设计类,就是设计类的成员
    • 常见类的成员有
      • 属性:对应类中的成员变量
      • 行为:对应类中的成员方法

四、类和对象的使用(面向对象思想落地的实现):

1.创建类,设计类的成员

//1.创建类,设计类的成员
class Person{
	//属性
	String name;
	int age = 1;
	boolean isMale;
	
	//方法
	public void eat() {
		System.out.println("人可以吃饭");
	}
	
	public void sleep() {
		System.out.println("人可以睡觉");
	}
	
	public void talk(String language) {
		System.out.println("人可以说话,使用的是:" + language);
	}
}

2.创建类的对象

public class PersonTest {

	public static void main(String[] args) {
		//创建Person类的对象
		Person p1 = new Person();
	}
}

3.通过“对象.属性”或“对象.方法”调用对象和结构

		//调用对象的结构:属性、方法
		//调用属性:“对象.属性”
		p1.name = "Tom";
		p1.isMale = true;
		System.out.println(p1.name);
		
		//调用方法:“对象.方法”
		p1.eat();
		p1.sleep();
		p1.talk("Chinese");
		
		//******************************
		Person p2 = new Person();
		System.out.println(p2.name);//null
		System.out.println(p2.isMale);
		
		
		//******************************
		//将p1变量保存的对象地址赋值给p3,导致p1和p3指向了堆空间中的同一个对象实体。
		Person p3 = p1;
		System.out.println();//Tom
		
		p3.age = 10;
		System.out.println(p1.age);//10
	如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static)
	意味着:如果我们修改了一个对象的属性a,则不影响另外一个对象属性a的值

五、对象内存解析

  • 堆:存放对象实例(new出来的结构:对象、数组)
  • 栈:存储局部变量
  • 方法区:类信息、常量、静态变量、即时编译后的代码

六、类中属性的使用

属性(成员变量) vs 局部变量

class User{
	//属性(或成员变量)
	String name;
	public int age;
	boolean isMale;
	
	public void talk(String language) {//language:形参,也是局部变量
		System.out.println("我们使用" + language + "进行交流");
	}
	
	public void eat() {
		String food = "烙饼";//局部变量
		System.out.println("北方人喜欢吃:" + food);
	}
}

1、相同点:

  • 定义变量的格式:数据类型 变量名 = 变量值
  • 先声明,后使用
  • 变量都有其对应的作用域

2、不同点:

  • 在类中声明点的位置不同:
    属性:直接定义在一对{}内

    局部变量:声明在方法内,方法形参、代码块内、构造器形参、构造器内部的变量

  • 关于权限修饰符的不同
    属性:可以在声明属性时,指明其权限,使用权限修饰符
    常用的权限修饰符:private、public、缺省、protected ---->封装性
    目前,大家声明属性时,都使用缺省就可以了

    局部变量:不可以使用权限修饰符

  • 默认初始化值的情况:
    属性:类的属性,根据其类型,都有默认初始化值
    整型(byte、short、int、long):0
    浮点型(float、double):0.0
    字符型(char):0(或’\u0000’)
    引用数据类型(类、接口、数组):null

    局部变量:没有默认初始化值
    意味着,调用局部变量之前,一定要显式赋值。
    特别的:形参在调用时赋值即可

  • 在内存中加载的位置
    属性:加载到堆空间(非static)
    局部变量:加载到栈空间

七、类中方法的声明和使用

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

 比如:Math类:sqrt()、random()...
      Scanner类:nextxxx()...
      Arrays类:sort()、binarySearch()、toString()、equals()...

1.举例:

public void eat() {}
public void sleep(int hour) {}
public String getName() {}
public String getNation(String nation) {}

2.方法的声明:

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

3.说明:

  • 3.1 关于权限修饰符:

    • Java规定的4中权限修饰符:private、public、缺省、protected
  • 3.2 返回值类型:有返回值 vs 无返回值

    • 3.2.1 如果方法有返回值,必须在方法声明时,指定返回值类型。同时,方法中,需要使用 return关键字来返回指定类型的变量或常量。
      如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不使用return。
      如果使用的话,只能"return;"表示结束此方法的意思。
    • 3.2.2我们定义方法该不该有返回值?
      ①题目要求
      ②凭经验,具体问题具体分析
  • 3.3方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

  • 3.4形参列表:方法可以生命0个,1个,或多个形参。

    • 3.4.1格式:数据类型1 形参1,数据类型2 形参2,…
    • 3.4.2我们定义方法是,该不该定义形参?
      ①题目要求
      ②凭经验:具体问题具体分析
  • 3.5方法体:方法功能的体现。

    4.return关键字的使用:
    1.使用范围:使用在方法体中
    2.作用:结束方法,针对有返回值类型的方法,使用"return 数据"方法返回所要的数据
    3.注意点:return关键字后面不可以声明执行语句

5.方法的使用中,可以调用当前类的属性或方法
特殊的:方法A中又调用了方法A:递归方法
方法中不能定义方法

;