栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java~面向对象(上)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java~面向对象(上)

目录
  • 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关键字

1、面向过程与面向对象

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

  • 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
  • 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
1.1、学习面向对象内容的三条主线
  • Java 类及类的成员:属性、方法、构造器、代码块、内部类
  • 面向对象的三大特征:封装、继承、多态性、(抽象性)
  • 其它关键字:this、super、static、final、abstract、interface、package、import 等
1.2、面向对象的思想概述
  • 程序员从面向过程的执行者转化成了面向对象的指挥者
  • 面向对象分析方法分析问题的思路和步骤:
    • 根据问题需要,选择问题所针对的现实世界中的实体。
    • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
    • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
    • 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
2、 类和对象
  • 面向对象的两个要素:
    类:对一类事物的描述,是抽象的、概念上的定义
    对象:是实际存在的该类事物的每个个体,因而也称为实 例(instance)。

  • 可以理解为:类= 抽象概念的人;对象= 实实在在的某个人
    面向对象程序设计的重点是类的设计;
    设计类,其实就是设计类的成员。

2.1、Java 类及类的成员
  • 属性:对应类中的成员变量
  • 行为:对应类中的成员方法
2.2、类与对象的创建及使用
  • 设计类、其实就是设计类的成员
    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
8.2、import关键字

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);
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号