从零开始学java(18)--- 类和方法

这篇博客介绍了Java中类和方法的基本概念。讨论了数据类型存储与传递的差异,包括基本类型与引用类型在栈和堆中的存储情况。讲解了包的作用、命名规范及如何导入不同包的类。此外,还阐述了类的属性,如成员变量和局部变量的范围,并提供了练习题,引导读者实践创建Product和Storage类,实现入库、出库和盘点功能。
摘要由CSDN通过智能技术生成

Day8

今天继续学习了解类和方法

1.关于不同数据类型值的储存与传递

数据类型:
基本数据类型:只有8种
引用数据类型:除了基本数据类型
区别:
存储方式的不同:基本数据类型存储的是值,引用数据类型存储的是地址。

实际上:
首先储存区大概分为以下6种
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
6. 非RAM存储:硬盘等永久存储空间

这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

实际上,常量和字符串的直接定义都是直接指向常量池中的对应的地址,相同的值只有唯一的地址。

对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。
形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。
成员变量存储在堆中的对象里面,由垃圾回收器负责回收。
总的来说:
1.引用类型总是被分配到“堆”上。不论是成员变量还是局部
2.基础类型总是分配到它声明的地方:成员变量在堆内存里,局部变量在栈内存里。

方法传参:
基本数据类型,采用传值;形参的改变不会影响实参的值
引用数据类型,采用传址;形参的改变会影响实参的值

==:用于基本数据类型,比较值是否相等
用于引用数据类型,比较地址是否相等,是否是同一个对象

2.包:package

储存与文件系统完全一致
作用:避免命名冲突
包的命名:域名反写,保证包的唯一性 所有的字母小写,不要使用关键字,不能以数字开头
域名:需要申请,全球唯一

包可以有子包,但实际上他们是不同的包,没有关系。

如何使用不同包中的类?

使用import导入不同包的类
import java.util.*; //导入包中所有的类
import java.util.Scanner; //导入包中特定的类
在JDK中有一个特殊的包 java.lang 使用该包中的类无需显式导入
无需导入的包:本包,java.lang

Eclipse:Ctrl+Shift+O快捷键可以直接将涉及的类选择导入。

3.类属性:

称为类的成员变量,默认有初始值的,数字类型的是0或0.0等,boolean默认是false,引用类型是null。
注意:与方法中的局部变量的区别

作用域 Scope:
属性可以认为是全局变量,在类的方法中可以使用。
方法中的变量是局部变量,在本方法中使用。

练习

1 声明一个产品(Product)类,声明其属性(编号:no,名称:name,库存:stock)
2 声明一个仓库(Storage)类,属性为大小为10的产品数组
在Storage类中,有如下方法:
入库:参数是产品,将其存入产品数组中,如果其中无该产品且数组有空间存储,则加到数组中,
存在该产品,则更新其库存
出库:参数是产品名和数量,先查询是否存在该产品,
如果存在:
则判断出库数量是否小于或等于其库存,符合条件则减少其库存,否则不作操作,仅提示
如果不存在该产品,则不做操作,仅提示
盘点:输出仓库中所有产品的信息
3 编写测试类进行测试

第一步:声明Product
第二步:声明Storage类
定义入库方法:
定义出库方法:

注意:考虑参数的有效性

Product:

public class Product {
   
int no;
String name;
int stock;
}

Storage:

public class Storage {
   
	Product[] product = new Product[4];
	int num = 0;// 计数器

//入库
	void putInStorage(Product p) {
   
		if (num == 0) {
   // 判断是否是第一个入库产品
			product[num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值