- 1、面向过程与面向对象
- 1.1、学习面向对象内容的三条主线
- 1.2、面向对象的思想概述
- 2、 类和对象
- 2.1、Java 类及类的成员
- 2.2、类与对象的创建及使用
- 2.3、对象的创建和使用:内存解析
- 3、类的成员之一:属性
- 4、类的成员之二:方法
- 4.1、类中方法的声明和使用
- 4.2、理解“万事万物皆对象”
- 4.3、对象数组的内存解析
- 4.4、匿名对象的使用
- 4.5、自定义数组的工具类
- 4.6、方法的重载(overload)
- 4.7、可变个数的形参
- 4.8、方法参数的值传递机制(重点!!!)
- 4.8.1、针对基本数据类型
- 4.8.2、针对引用数据类型
- 4.9、递归(recursion)方法
- 4.10、练习
- 5、面向对象特征之一:封装与隐藏
- 5.1、练习
- 6、类的结构之三:构造器(构造方法)
- 6.1、构造器的理解
- 6.2、总结属性赋值的过程
- 6.3、JavaBean 的使用
- 6.4、UML 类图
- 6.5、练习
- 7、this关键字
- 7.1、this 调用属性、方法、构造器
- 7.2、练习
- 8、package、import关键字
- 8.1、package关键字
- 8.2、import关键字
面向过程(POP) 与面向对象(OOP)
- 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
- 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
- Java 类及类的成员:属性、方法、构造器、代码块、内部类
- 面向对象的三大特征:封装、继承、多态性、(抽象性)
- 其它关键字:this、super、static、final、abstract、interface、package、import 等
- 程序员从面向过程的执行者转化成了面向对象的指挥者
- 面向对象分析方法分析问题的思路和步骤:
- 根据问题需要,选择问题所针对的现实世界中的实体。
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
- 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
- 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
-
面向对象的两个要素:
类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实 例(instance)。 -
可以理解为:类= 抽象概念的人;对象= 实实在在的某个人
面向对象程序设计的重点是类的设计;
设计类,其实就是设计类的成员。
- 属性:对应类中的成员变量
- 行为:对应类中的成员方法
-
设计类、其实就是设计类的成员
Field = 属性 = 成员变量 = 域、字段
Method = (成员)方法 = 函数 -
创建类 = 类的实例化 = 实例化类
-
类和对象的使用(面向对象思想落地的实现)
1.创建类,设计类的成员
2.创建类的对象
3.通过“对象.属性”或“对象.方法”调用对象的结构 -
如果创建类一个类的多个对象,则每个对象都独立的拥有一套类的属性(非 static 的),这意味着如果我们修改一个对象的属性 a,则不影响另外一个对象属性 a 的值。
public class PersonTest {
public static void main(String[] args) {
//2.创建 Person 类的对象
//创建对象语法:类名 对象名 = new 类名();
Person p1 = new Person();
//调用类的结构:属性、方法
//调用属性:“对象.属性”
p1.name = "Tom";
p1.age = 25;
p1.isMale = true;
System.out.println(p1.name);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.talk("chinese");
/
public int compare(Girl girl){
// if(this.age > girl.age){
// return 1;
// }else if(this.age < girl.age){
// return -1;
// }else{
// return 0;
// }
//或者
return this.age - girl.age;
}
}
public class BoyGirlTest {
public static void main(String[] args) {
Boy boy = new Boy("罗密欧",21);
boy.shout();
Girl girl = new Girl("朱丽叶", 18);
girl.marry(boy);
Girl girl1 = new Girl("祝英台", 19);
int compare = girl.compare(girl1);
if(compare > 0){
System.out.println(girl.getName() + "大");
}else if(compare < 0){
System.out.println(girl1.getName() + "大");
}else{
System.out.println("一样的");
}
}
}
练习2
【题目描述】
实验1:Account_Customer.pdf
【代码实现】
public class Account {
private int id;//账号
private double balance;//余额
private double annualInterestRate;//年利率
public Account (int id, double balance, double annualInterestRate ){//创建账户时直接规定账号 余额 年利率
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
//在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示。
public void withdraw (double amount){//取钱
if(balance < amount){
System.out.println("余额不足,取款失败");
return;
}
balance -= amount;
System.out.println("成功取出:" + amount);
}
public void deposit (double amount){//存钱
if(amount > 0){
balance += amount;
System.out.println("成功存入:" + amount);
}
}
}
public class Customer {
private String firstName;//名
private String lastName;//性
private Account account;//注意是Account类型,顾客需要开账户时用Customer类型的对象调用setAccount()方法来为顾客添加账户
public Customer(String f,String l){//创建对象时直接起名字
this.firstName = f;
this.lastName = l;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
public class CustomerTest {
public static void main(String[] args) {
Customer cust = new Customer("Jane", "Smith");//造一个顾客
Account acct = new Account(1000, 2000, 0.0123);//造一个账户
cust.setAccount(acct);//顾客开账户
//存钱 //存钱方法在Account类中
// Account account = cust.getAccount();//1.顾客存钱,顾客先得到自己的账户对象
// account.deposit(100); //2.用账户对象调用存钱方法
//或者
cust.getAccount().deposit(100);
cust.getAccount().withdraw(960);
cust.getAccount().withdraw(2000);
System.out.println("Customer[" + cust.getLastName() + "," + cust.getFirstName() +
"] has a account: id is " + cust.getAccount().getId() + ",annualInterestRate is "+
cust.getAccount().getAnnualInterestRate() * 100 + "% ,balance is " + cust.getAccount().getBalance());
}
}
练习3
【题目描述】
实验2:Account_Customer_Bank.pdf
【代码实现】
public class Account {
private double balance;
public double getBalance() {
return balance;
}
public Account(double init_balance){//创建账户时存的余额
this.balance = init_balance;
}
//存钱操作
public void deposit(double amt){
if(amt > 0){
balance += amt;
System.out.println("存钱成功");
}
}
//取钱操作
public void withdraw(double amt){
if(balance >= amt){
balance -= amt;
System.out.println("取钱成功");
}else{
System.out.println("余额不足");
}
}
}
public class Customer {
private String firstName;
private String lastName;
private Account account;//理解同上
public Customer(String f, String l) {
this.firstName = f;
this.lastName = l;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
public class Bank {
private Customer[] customers;// 存放多个客户的数组
private int numberOfCustomers;// 记录客户的个数
public Bank() {
customers = new Customer[10];
}
// 添加客户
public void addCustomer(String f, String l) {
Customer cust = new Customer(f, l);//
// customers[numberOfCustomers] = cust;
// numberOfCustomers++;
// 或
customers[numberOfCustomers++] = cust;
}
// 获取客户的个数
public int getNumOfCustomers() {
return numberOfCustomers;
}
// 获取指定位置上的客户
public Customer getCustomer(int index) {
// return customers[index];//可能报异常
if (index >= 0 && index < numberOfCustomers) {
return customers[index];
}
return null;
}
}
public class BankTest {
public static void main(String[] args) {
Bank bank = new Bank();//1.先创建银行对象
bank.addCustomer("Jane", "Smith");//2.添加客户
//连续操作
bank.getCustomer(0).setAccount(new Account(2000));//用bank.getCustomer(0)先找到顾客,顾客开账户
bank.getCustomer(0).getAccount().withdraw(500);//取500
double balance = bank.getCustomer(0).getAccount().getBalance();//打印余额
System.out.println("客户:" + bank.getCustomer(0).getFirstName() + "的账户余额为:" + balance);
System.out.println("***********************");
bank.addCustomer("万里", "杨");
System.out.println("银行客户的个数为:" + bank.getNumOfCustomers());
}
}
8、package、import关键字
8.1、package关键字
package 关键字的使用
- 为了更好的实现项目中类的管理,提供包的概念
- 使用 package 声明类或接口所属的包,声明在源文件的首行
- 包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
- 每“.”一次,就代表一层文件目录。
- 补充:
- 同一个包下,不能命名同名接口或同名类
- 不同包下,可以命名同名的接口、类。
JDK 中主要的包介绍
- java.lang----包含一些 Java 语言的核心类,如 String、Math、Integer、System 和 Thread,提供常用功能
- java.net----包含执行与网络相关的操作的类和接口
- java.io----包含能提供多种输入/输出功能的类
- java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数
- java.text----包含了一些 java 格式化相关的类
- java.sql----包含了 java 进行 JDBC 数据库编程的相关类/接口
- java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。B/S C/S
import关键字的使用
- 在源文件中显式的使用import结构导入指定包下的类、接口
- 声明在包的声明和类的声明之间
- 如果需要导入多个结构,则并列写出即可
- 可以使用"xxx.*"的方式,表示可以导入xxx包下的所有结构
- 如果使用的类或接口是java.lang包下定义的(java核心包),则可以省略import结构
- 如果使用的类或接口是本包下定义的,则可以省略import结构
- 如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。
- 使用"xxx.*"方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入
- import static:导入指定类或接口中的静态结构:属性或方法
package com.atguigu.java2;
import java.lang.reflect.Field;
import java.util.*;
import com.atguigu.exer4.Account;
import com.atguigu.exer4.Bank;
import com.atguigu.java2.java3.Dog;
import static java.lang.System.*;
import static java.lang.Math.*;
public class PackageImportTest {
public static void main(String[] args) {
String info = Arrays.toString(new int[]{1,2,3});
Bank bank = new Bank();
ArrayList list = new ArrayList();
HashMap map = new HashMap();
Scanner s = null;
System.out.println("hello!");
Person p = new Person();
Account acct = new Account(1000);
//全类名的方式显示
com.atguigu.exer3.Account acct1 = new com.atguigu.exer3.Account(1000,2000,0.0123);
Date date = new Date();
java.sql.Date date1 = new java.sql.Date(5243523532535L);
Dog dog = new Dog();
Field field = null;
out.println("hello");
long num = round(123.434);
}
}



