第3章:面向对象编程

3.1 面向对象与面向过程

3.1.1 面向对象与面向过程

1)面向过程强调的过程,是对行为整个过程的描述

2)面向对象强调的是对象,让对象具备某些行为功能去完成一些事情

3)面向对象三大特征:封装、继承和多态

4)理解:人打开门

面向过程:人       打开     门

面向对象:

人{

打开(门){

门.开();

}

}

门{

开(){

}

}

3.1.2 面向对象思想的法则一

1)设计类,并设计类的成员(成员方法&&成员变量)

2)用过类,来创建类的对象(也称作类的实例化)

3)通过“对象.属性”或“对象.方法”来调用,完成相应的功能

3.1.3 创建的多个对象

     彼此各自拥有一套类的属性,当对其中一个对象属性进行修改,不会影响到其他对象的属性值

3.2 java语言的基本元素:类和对象

3.2.1 类和对象

1)类(class)和对象(object)是面向对象的核心概念

a)类是对一类事物的描述,抽象、概念上的定义,需要重点设计

b)对象是实际存在的个体,被称为实例(instance)

c)定义类其实是定义当中的成员变量field和成员方法method(属性和行为)

3.3 类的成员之一:属性

3.3.1 属性

1)类的属性(成员变量):成员变量VS局部变量

相同点:a)遵循变量声明的格式:数据类型   变量名 = 初始化值

                b)都有作用域

不同点:a)声明的位置不同。成员变量:声明在类里面,方法外

                      局部变量:声明在方法内,方法的形参部分,代码块内

                b)成员变量的修饰符有四个:public private protected 缺省

                      局部变量没有修饰符

                c)初始化值:一定会有初始化值

                      成员变量:如果在声明的时候,不显示的赋值,那么不同的数据类型会有不同的默认初始化值

                      byte short int long ==>0

                      float double  ==>0.0

                      char  ==>空格

                      boolean  ==>false

                      引用类型变量==>null

                      局部变量:一定要显示的赋值。(局部变量没有默认初始化值)

               d)二者在内存中存放的位置不同:

   成员变量:存在于堆空间中

   局部变量:栈空间中

2)总结:关于变量的分类。

a)按照数据类型的不同:基本数据类型(8种)&引用数据类型

         b)按照声明的位置不同:成员变量 & 局部变量

3.4 类的成员之二:方法

3.4.1 方法

1)类的方法:提供某种功能的实现。

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

b)关于返回值类型:void  表明此方法不需要返回值

      有返回值的方法:在方法的最后一定有return + 返回值类型对应的变量      

      void与return不可以同时出现在一个方    法内。像是一对“冤家”。

c)方法内可以调用本类的其他方法或属性,但是不能在方法内再定义方法

2)方法的参数传递(重点、难点)

a)形参:方法声明时,方法小括号内的参数

      实参:调用方法时,实际传入的参数的值

b)规则:java中的参数传递机制:值传递机制

    >形参是基本数据类型的:将实参的值传递给形参的基本数据类型的变量

    >形参是引用数据类型的:将实参的引用类型变量的值(对应的堆空间的对象实体的首地址值)传递给形参       的引用类型变量

3.4.2 方法重载

1)同一个类中

2)方法名必须相同

3)方法的参数列表不同(a.参数个数不同 b.参数类型不同)  

        (object)是面向对象的核心概念

a)类是对一类事物的描述,抽象、概念上的定义,需要重点设计

b)对象是实际存在的个体,被称为实例(instance)

c)定义类其实是定义当中的成员变量field和成员方法method(属性和行为)

3.5 对象的创建和使用

3.5.1 对象的创建及使用

1)先创建类,然后实例化类的对象

      Person per = new Person();

      per是对象的名字,通过对象名.属性和对象名.方法调用本身具有的功能

2)对象可以作为参数传递

3)匿名类对象,只能使用一次,形式为new Person()

4)对象属性赋值的先后顺序:

a)属性的默认初始化

b)属性的显示初始化 

c)通过构造器给属性初始化 

d)通过“对象.方法”的方式给属性赋值

3.6 源码_帮助理解

3.2.7 代码一

//创建包com.test.java
package com.test.java;

//导入包中的类com.util.Scanner
import com.util.Scanner;

//一个.java.文件只能有一个public类
public class Test{
//main方法
Public static void main(String[] args){
	//类的实例化,用类创造对象
	Scanner s = new Scanner();
	//调用创建对象s里面的nextString()方法和nextInt()方法为变量name和age键盘输入赋值
	String name = s.nextString();
	int age = s.nextInt();
	//用类Student创建一个叫xiaoNai的对象,并用带有参数的构造器给xiaoNai的年龄赋值
	Student xiaoNai = new Student(age);
	//调用对象xiaoNai的setName()方法设置名字
	xiaoNai.setName(name);
	//通过调用xiaoNai的getName()和getAge()方法获得姓名年龄并输出
	Syatem.out.println("名字:"+xiaoNai.getName()+"年龄:"+xiaoNai.getAge());
	}
}

class Person {
	// 1.属性
	private String name;

	// 2.构造器
	public Person() {
		name = "肖奈";
	}

	public Person(String name) {
		this.name = name;
	}

	// 3.方法
	public String getName() {
		return name;
	}

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

// Student类继承父类Person的属性和方法
class Student extends Person {
	// 1.属性
	private int age;

	// 2.构造器
	public Student() {
	}

	public Student(int age) {
		this.age = age;
	}

	// 3.方法
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

3.7 面向对象特征之一:封装和隐藏

3.7.1 封装和隐藏

1)问题:当创建了类的对象以后,如果直接通过“对象.属性”的方式对相应的对象属性赋值的话,可能会出现不满足实         际情况的意外,我们考虑不让对象来直接作用属性,而是通过“对象.方法”的形式,来控制对象对属性的访问。实际         情况中,对属性的要求就可以通过方法来体现。

2)解决的方法:(封装性的思想)将类的属性私有化,提供公共的方法(setter & getter)来实现调用。

3.8 类的成员之三:构造器(构造方法)

3.8.1 构造器(构造方法)

1)构造器(constructor 构造方法)作用:a.创建对象   b.给创建的对象的属性赋值

2)设计类时,若不显示的声明类的构造器的话,程序会默认提供一个空参的构造器

3)一旦显示的定义类的构造器,那么默认的构造器就不再提供。

4)如何声明类的构造器。格式:权限修饰符 类名(形参){}

5)类的多个构造器之间构成重载

3.9 几个关键字:this、package、import

3.9.1 关键字_this

1)this在方法内部使用,即这个方法所属对象的引用

2)this在构造器内部使用,表示该构造器正在初始化的对象

3)this表示当前对象,可以调用类的属性、方法和构造器

4)当在方法内需要用到调用该方法的对象时,就用this

3.9.2 关键字_package

1)package:声明源文件所在的包,写在程序的第一行,每“.”一次,表示一层文件目录。包名都要小写

3.9.3 关键字_import

1)显示导入指定包下的类或接口

2)写在包的声明和源文件之间

3)如果需要引入多个类或接口,那么就并列写出

4)如果导入的类是java.lang包下的,如:System String Math等,就不需要显示的声明

3.10 Java之杂谈

3.10.1 内存划分结构

1)栈stack:存放局部变量,对象的引用名,数组的引用名     

2)堆heap:存放new出来的东西(如对象的实体、数组的实体),含成员变量

3)方法区:含字符串常量

4)静态域:声明为static的变量

3.10.2 JDK新特性之可变参数的传递

1)格式:对于方法的形参。数据类型 … 形参名

2)可变个数的形参的方法与同名的方法之间构成重载

3)可变个数的形参在调用时,个数从0开始,到无穷多个都可以

4)使用多变多个形参的方法与方法的形参使用数组是一致的

5)若方法中存在多个可变个数的形参,那么一定要声明在方法形参的最后

6)在一个方法中,最多恒明一个可变个数的形参

3.10.3 JavaBean

1)所谓JavaBean是指符合如下标准的Java类:

a)类是公共的

b)有一个无参的公共的构造器

c)有属性,且有对应的get、set方法

3.10.4 UML类图

 

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/88924417