Java面向对象(上)-cnblog

面向对象(上)

image-20210428155102533

Java语言基本元素:类和对象

  • 类的成员:
    • Field 属性 行为

image-20210428155414315

image-20210428155448148

4.3 对象的创建和使用

image-20210428155534305

  • 对象的生命周期

  • image-20210428154203091

  • 内存解析

image-20210428154922390

image-20210428155004088

  • 栈stack中为局部变量

  • 匿名对象

image-20210428155032931

4.4 属性

image-20210428155813138

image-20210428155827294

image-20210428155839232

image-20210428155849339

image-20210428170140985

4.5 方法

  • 方法里面不可定义方法

测验

  • 开发时一般一个源文件里脂肪进一个类
  • 功能类和测试类分开放入两个源文件
  • 计算圆面积
  • 学生成绩:功能封装在方法中
package com.shc.exe;

public class Student {
	private int number;
	private String name;
	private double score;
	
	public void info() {
		System.out.println("学号:"+number+",姓名:"+name+",成绩:"+score);
	}
	
	public static void main(String[] args) {
		new Student().info();
	}
}

package com.shc.exe;

/**
 * 
 * @Description
 * @author shc	Email:200110732@stu.hit.edu.cn
 * @version
 * @date 2021年4月28日下午4:42:08
 *
 */
public class TestStudent {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student[] stus = new Student[50];
		for(int i=0;i<50;i++) {
			stus[i]=new Student();
//			stus[i].setName()
		}
		
		TestStudent ts = new TestStudent();
		ts.print(stus);
		System.out.println("============================");
		ts.sort(stus);
		System.out.println("============================");
		ts.search(stus);
		System.out.println("============================");
	}
		
	/**
	 * 
	 * @Description 对学生成绩进行排序 并输出
	 * @author shc
	 * @date 2021年4月28日下午4:41:17
	 */
	public void sort(Student[] stus) {
		System.out.println("sort");
	}
	
	/**
	 * 
	 * @Description 查找目标学生
	 * @author shc
	 * @date 2021年4月28日下午4:41:54
	 */
	public void search(Student[] stus) {
		System.out.println("search");
	}
	
	/**
	 * 
	 * @Description 输出学生成绩
	 * @author shc
	 * @date 2021年4月28日下午4:42:23
	 */
	public void print(Student[] stus) {
		System.out.println("print");
	}
}

print
============================
sort
============================
search
============================

复习

内存复习

  • 内存解析出现在运行的时候(stack,heap…

    • 编译完源程序之后生成一个或多个字节码文件.class

    我们使用JVM中类的加载器和解释器对生成的字节码文件进行解释运行。

    这意味着,需要把字节码文件对应的类加载到内存中,涉及到内存解析

  • 虚拟机(JVM)栈,即为平时提到的栈结构。我们将局部变量存储在栈结构中。

  • :我们将new出来的结构(比如:数组,对象)加载在堆空间中。)补充:对象的属性(非static的)加载在堆空间中

  • 方法区:类的加载信息,常量池,静态域。

属性 VS 局部变量

    1. 相同点
    • 定义变量的格式:数据类型 变量名 = 变量值
    • 先声明,后使用
    • 变量都有对应的作用域
    1. 不同点
    • 在类中声明的位置的不同

      • 属性:直接定义在类的一对{}内
      • 局部变量:声明在方法内、方法形参、代码块内、构造器内
    • 权限修饰符的不同

      • **属性:可以在声明属性时,指明权限。**使用权限修饰符private,public,缺省,protected
      • 局部变量:不可以使用权限修饰符
    • 默认初始值情况

      • 属性:有默认初始化值
      • 局部变量:无默认初始化值
      • 意味着我们再调用局部变量之前,一定要显示赋值。特别的,形参在调用时,我们赋值即可
    • 在内存中你加载的位置

      • 属性:加载到堆空间中(非static)
      • 局部变量:加载到栈空间中
  • 变量的分类

    • 方式一:按照数据类型

      • 数据类型
        • 基本数据类型
          • 数值型
            • 整形
            • 浮点型
          • 字符型(char)
          • bool型(boolean)
        • 引用数据类型
          • 类(class)(字符串在这里)
          • 接口(interface)
          • 数组([ ])

      image-20210428172247729

    • 方式二:按照在类中声明的位置

      • 所有变量
        • 成员变量
          • 实例变量:不用static修饰
          • 类变量:用static修饰
        • 局部变量
          • 形参(方法,构造器中定义的)
          • 方法局部变量(方法内定义)
          • 代码块局部变量(在代码块中遍历)

      image-20210428172302536

方法

image-20210428172232392

万物皆对象

    1. Java语言范畴中,我们都将功能,结构体封装到类中,通过类的实例化,来调用具体的功能结构。
    • Scanner,String
    • 文件:File
    • 网络资源:URL
    1. 如图。涉及到Java语言与Html,后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类,对象

image-20210428173035285

对象数组内存解析

image-20210428173833553

4.6

重载

可变个数的形参

package com.shc.java1;

/**
 * 
 * @Description
 * 探究可变形参个数
 * 1.jdk5.0之后引入
 * 2.具体使用
 * 	2.1 可变个数的形参格式:数据类型 ... 变量名
 * 	2.2 当调用可变个数形参的方法时,传入的个数可以是:0,1,2...
 *  2.3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
 *  2.4 可变个数形参的方法与本类中的方法名相同,形参类型也相同的数组不构成重载。即二者不能共存
 *  2.5 可变个数形参必须声明再参数表的末尾
 *  2.6 因此可变个数形参在方法中最多只能有一个
 * @author shc	Email:200110732@stu.hit.edu.cn
 * @version
 * @date 2021年4月29日下午2:33:57
 *
 */
public class MethodArgsTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MethodArgsTest mas = new  MethodArgsTest();
		mas.show();
		mas.show("hello");
		mas.show("hello","world");
		mas.show(new String[]{"hello","world"});
	}	
	
	public void show(){
		System.out.println("null");
	}
	
	public void show(String word) {
		System.out.println(word);
	}
	
//	jdk5.0之后引入
	public void show(String ...words) {
//		System.out.println(words); [Ljava.lang.String;@7637f22
		for(int i=0;i<words.length;i++) {
			System.out.print(words[i]+" ");
		}
		System.out.println("");
	}
	
//	与下面不共存
//	public void show(String[] words) {
//		
//	}
    //对应于mas.show(new String[]{"hello","world"});
	
	public void show(int i,String ...strs) {
		
	}
	
//	public void show(String ...strings ,int i) {
//		// TODO Auto-generated method stub
//	}
}

null
hello
hello world 
hello world 

4.7 封装

封装性体现:权限

修饰符类内部同一个包不同包的子类同一工程
private
缺省
protected
public
  • 他们可以用来修饰属性、方法、构造器、内部类。
  • 修饰类的话,只能用缺省,public

image-20210428181641435

4.8 类成员之三 构造器

  • 自己如果写了非空参数构造器,那么系统默认给的空构造器就没有了
  • 父类的构造器不可以被子类继承

4.8 拓展 JavaBean

  • JavaBean是一种Javaui眼写成的可重用组件

  • 所谓JavaBean,是指符合如下标准的Java类

    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性,且有对应的get,set方法
  • 系统默认提供的构造器的权限和类的权限是相同的

image-20210428182512765

4.8 拓展 UML

image-20210429144423332

4.9 this的使用

4.10 关键字之package

    1. 为了更好的实现项目中类的管理,提出包的概念
    1. 使用package声明类或接口所属的包,声明在类文件的首行、
    1. 包,属于标识符,遵循标识符的命名规则,见名知意
    1. 每” . “一次,就代表一层文件目录
  • 补充:同一包下,不能命名同名的接口或者类,不同的包下可以命名同名的接口,类

image-20210429233120313

image-20210428183143683

4.10 关键字之import

image-20210429235314855

image-20210429234408646

image-20210429235003277

image-20210430000416497

4.9 MVC设计模式

image-20210428183728503

image-20210428183744541

Bank练习

  • class

    • Customer 客户
    • Account 账户
    • Bank 银行
    • BankTest 测试类 类里面只有一个main函数 没有方法,属性。
  • Account.java文件
        package com.shc.exe1;
    
    public class Account { //账户
    	private double balance;
    	
    	public Account(double init_balance) {
    		this.balance = init_balance;
    	}
    	
    	//查看余额
    	/**
    	 * 
    	 * @Description 文档注释试用 查看余额
    	 * @author shc
    	 * @date 2021年4月29日下午7:30:10
    	 * @return
    	 */
    	public double getBalance() {
    		return balance;
    	}
    	
    	//存钱
    	public void deposit(double amt) {
    		if(amt>=0) balance+=amt;
    		else System.out.println("你这是取钱不是存钱 操作错误");
    	}
    	
    	//取钱
    	public void withDraw(double amt) {
    		if(balance>=amt) balance-=amt;
    		else System.out.println("余额不足");
    	}
    } 
    
        
    
  • Customer.java文件
        package com.shc.exe1;
    
    public class Customer {
    	private String firstName;
    	private String lastName;
    	private Account account;
    	
    	public Customer(String firstName,String lastName){
    		this.firstName =firstName;
    		this.lastName = lastName;
    	}
    	
    	//设定账户
    	public void setAccount(Account account) {
    		this.account = account;
    	}
    	
    	public String getFirstName() {
    		return firstName;
    	}
    	
    	public String getLastName() {
    		return lastName;
    	}
    	
    	public Account getAccount() {
    		return this.account;
    	}
    	
    }
    
    
  • Bank.java
        package com.shc.exe1;
    
    public class Bank {
    
    	private int maxn;
    	private Customer[] customers = new Customer[maxn];//数组类引用变量管理数组
    	private int numberOfCustomers;
    	
    	public Bank() {}
    
    	public Bank(int maxn) {
    		this.maxn = maxn;
    		customers = new Customer[maxn];
    	}
    	
    	//添加客户
    	public void addCustomer(String firstName,String lastName) {
    		if(numberOfCustomers>=maxn) System.out.println("已满 加入失败");
    		else{
    			customers[numberOfCustomers++] = new Customer(firstName, lastName);
    		}
    		return ;
    	}
    	
    	//查询客户
    	public Customer getCustomers(int idx) {
    		if(idx<0||idx>=numberOfCustomers) {
    			System.out.println("用户不存在");
    			return null;
    		}else return customers[idx];
    	}
    
    	//查询客户个数
    	public int getNumberOfCustomers() {
    		return numberOfCustomers;
    	}
    	
    		
    }
    
    
  • BankTest.java
        package com.shc.exe1;
    
    public class BankTest {
    	public static void main(String[] args) {
    		Bank bank = new Bank(50);
    		bank.addCustomer("pp", "p");
    		//连续操作!! 缺点:有空指针的时候不好排查
    		bank.getCustomers(0).setAccount(new Account(100));
    		bank.getCustomers(0).getAccount().withDraw(66);
    		//bank---get--->Customer----get---->Account
    		double balance = bank.getCustomers(0).getAccount().getBalance();
    		//bank---get--->customer----get---->account----get--->balance
    		System.out.println(bank.getCustomers(0).getLastName()+bank.getCustomers(0).getFirstName()+"账户的余额为"+balance);
    	}
    }
    
    
  • ppp账户的余额为34.0
    

项目二

没写上来

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值