Java进阶学习-1类与对象初始化 成员变量成员函数


title: Java进阶学习(1) 类与对象初始化 成员变量成员函数
date: 2020-02-01 14:19:05
tags: Java学习

public static void main(String[] args) 
	{
		Picture pic = new Picture(420,250);
		Circle c1 = new Circle(320,40,80);
		Rectangle r1 = new Rectangle(100, 100, 100, 100);
		Triangle t1 = new Triangle(100, 100, 200, 100, 150, 50);
		Line l1 = new Line(0,205,400,205);
		pic.add(c1);
		pic.add(r1);
		pic.add(t1);
		pic.add(l1);
		pic.draw();	
	}

GUI = 图形用户界面 读作 古一~

用这个例子用于理解类和对象关系的例子

对象与类

对象是实体 需要被创建 可以为我们做事情

类的规范 根据类的定义来创建对象

类用于创建对象 制定创建对象的规则 规范定义

对象是实体 是被创建出来的物体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lok01QX4-1580663666801)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201152159741.png)]

对象 是这只猫 指具体的某一只猫 此时这只猫就是一个对象

而我们说猫的时候是指类 猫所有的属性 定义一只猫的规范

类定义了对象 每一个对象是那个类的实体

对象具有属性和服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owjD2SeN-1580663666804)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201152353357.png)]

把数据和对数据的操作放在一起称为封装

由这些操作保护内部的数据 数据是不对外开发的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XRIBOgs-1580663666805)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201152743971.png)]

面向对象思维看待事物看到功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xjJoqSnb-1580663666808)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201153106599.png)]

属性和动作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5EnCfEoE-1580663666811)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201153222964.png)]

public class VendingMachine {
	int price = 80;
	int balance;	//余额
	int total;
	
	void showPrompt()
	{
		System.out.println("Welcome");
	}
	
	void insertMoney(int amount)
	{
		balance = balance + amount;
	}
	void showBalnace() 
	{
		System.out.println(balance);
	}
	
	void getFood()
	{
		if(balance >= price)
		{
			System.out.println("Here you are");
			balance = balance - price;
			total = total + price;
		}
	}
	
	public static void main(String[] args) {
		VendingMachine vm = new VendingMachine();
		vm.showPrompt();
		vm.showBalnace();
		vm.insertMoney(100);
		vm.getFood();
		vm.showBalnace();

	}

}

定义了一个对象VendingMachine

创建对象

new VendingMachine();

VendingMachine vm = new VendingMachine();

自己设计了一个类 就可以用新设计的类型 VendingMachine 定义一个对象变量vm 用于接收新定义的一个对象new VendingMachine();

对象变量是对象的管理者。

让对象做事

使用点运算符 .

v.insertMoney(100);

v.getFood();

public static void main(String[] args) {
		VendingMachine vm = new VendingMachine();
		vm.showPrompt();
		vm.showBalnace();
		vm.insertMoney(100);
		vm.getFood();
		vm.showBalnace();
		VendingMachine vm1 = new VendingMachine();
		vm1.insertMoney(200);
		vm.showBalnace();
		vm1.showBalnace();

	}

创建不同的对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LS8yHnyx-1580663666813)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201154618620.png)]

在debug的时候不同的对象id号不同则为不同的对象而且点开内容也不同

类是定义了这个类所有对象长什么样

对象是这个类的一个具体实例

在类中定义的变量在每一个对象中都存在,且每个对象中的变量都不一样 不是同一个变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yM66fbq6-1580663666814)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201163105728.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LZrOqZr-1580663666816)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201163132951.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aznFuSvX-1580663666817)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201163156478.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMyyOuRe-1580663666820)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201163223751.png)]

函数与成员变量

在函数㕜可以直接写成员变量的名字来访问成员变量

究竟访问哪个对象 函数是通过对象来调用的

v.insertMoney()

这次调用临时建立了insertMoney()和v之间的关系 让insertMoney()内部的成员变量指的是成员变量

使用的是this联系

this

this是成员函数的一个特殊固有的本地变量 代表的是调用了这个函数的那个对象在调试的时候可以看到。

	int price = 80;		//成员变量price
	int balance;	//余额
	int total;
	
	void setPrice(int price)	//此处的price是此函数的参数price 而不是上面的成员变量price=80的price
	{
		this.price = price;		//直接的price为此函数的参数 要访问成员变量的price 要使用this来区分成员变量的price(this.price来表示成员变量)和函数参数的price(只可表示函数花括号内的参数) 
	}
	

this 常用还有因为可以少打字

this.getFood();//少打字使用this.

调用函数

通过.函数调用某个对象的函数 而this为当前调用这个函数的对象

在成员函数内部直接调用自己(this)的其他函数

void insertMoney(int amount)
	{
		balance = balance + amount;
		showBalnace();	//在成员函数内部 调用函数不同加前缀 this.可加可不加
	}
	void showBalnace() 
	{
		System.out.println(this.balance);	//this.balance 与balance 一样
	}

showBalnace(); //在成员函数内部 调用函数不同加前缀 this.可加可不加

但在成员函数外部调用的时候必须加上是哪个对象调用

		vm.showBalnace();
		vm1.showBalnace();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkEyeucY-1580663666821)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201164404594.png)]

j进了insertMoney再进showBalance 此时id为18

进入showBalance后仍为18 this会带入

此处是在成员函数中调用成员函数不用加前缀 默认直接带入当前调用类中函数的对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WjIeQ91L-1580663666823)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201164435763.png)]

本地变量

定义在函数内部的变量是本地变量 定义在函数外部的变量为成员变量

本地变量的生存期和作用域都是函数内部

成员变量的生存期是对象的生存期(new出一个对象才开始存在) 作用域是类内部的成员函数

成员变量的消失是java自动垃圾回收自动消失 只要关心什么时候开始存在

成员变量是new一个新的对象出来成员变量就存在 而本地变量是在函数当中存在的,当调用一个函数进入函数内部的时候本地变量存在 当函数调用结束本地变量消失。

作用域 本地变量在大括号内 而成员变量作用域在一个类的内部。类中的成员函数都可以使用这些成员变量。

对象的初始化

成员变量的初始化

类中的成员变量 java会保证 给成员变量一个初始值0

成员变量定义初始化

1.成员变量在定义的地方就可以给出初始值

2.没有给出初始值的成员变量会自动获得0值

​ 对象变量的0值代表没有管理任何对象也可以主动给null值

3.定义初始化可以调用函数 甚至可以使用已经定义的成员变量

构造函数

如果一个成员变量函数的名字和类的名字完全相同 则在创建这个类的每一个对象的时候会自动调用这个函数 构造函数

这个类不能有返回类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbE3EKBL-1580663666825)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201170316245.png)]

	int price = 80;		//成员变量price
	int balance = f();	//余额 使用函数调用
	int total;
	
	VendingMachine()		//构造函数 在构造的时候会调用构造函数 但下一步不是进入函数 而是把上面的成员变量先初始化 再进入构造函数语句
	{
		total = 100;
	}
	
	VendingMachine(int price)	//构造函数可以有多个 重载
	{
		this.price = price;
	}

两个同名函数看初始化的时候叫做函数重载

一个类可以有多个构造函数 只要他们的参数表不同

创建对象的时候给出不同的参数值 就会自动调用不同的构造函数

通过this()还可以调用其他构造函数

一个类里的同名但是参数表不同的函数构成了重载关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEraLhuS-1580663666828)(C:\Users\36987\AppData\Roaming\Typora\typora-user-images\image-20200201170808437.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值