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类图