1.定义类
// >>TODO 一个类以public class开头,public class 代表这个类是公共类,类名必须和文件名相同,
// >> TODO public class 后面紧跟类名,然后是一堆大括号的类体
public class Merchan {
String name;//成员变量的定义,
String id;
int count;
double price;
}
2.类的使用
public static void main(String[] args) {
// TODO 使用new操作符,可以创建一个类的实例/对象(instance / object)
// TODO 使用new创建一个类的实例侯,类中定义的每种变量都会被赋以其类型的初始值
// TODO 这个和数组一样
// TODO 使用一个类的对象变量,可以指向并操作这个实例,这点也和数组一样
Merchan merchan = new Merchan();//使用new操作符创建了一个名为merchan的Merchan类的实例(对象)
merchan.count=10;//使用点操作符可以操作实例变量所指向对象的成员变量
}
创建完之后,merchan对象的每个成员都有其类型所对应的缺省值、
3.引用(reference)数据类型
java中的数据类型分为基本数据类型和引用数据类型
基本数据类型:int double char 等
引用数据类型
public class Supermarket {
public static void main(String[] args) {
// TODO m是一个Merchan类型的引用,只能指向Merchan类型的实例;
// TODO 引用数据雷响变量包含两个部分的信息,类型和实例,也就是说
// TODO 每一个引用数据类型的变量(简称引用)都指向某个类(class/自定义类型)的
//TODO 的一个实例/对象(instance / object)不同类型的引用在java的世界里都是引用
// TODO 比如,m就是Merchan类型,只能指向Merchan的实例;
Merchan m;
Merchan m1 = new Merchan();
//TODO 若要给引用赋值,则两者的类型必须一样,m1可以给m赋值,因为她们都是Merchan类型的
// TODO 注意赋值之前,m并未指向任何对象。上面只是定义了m的类型,并未初始化
m = m1;// TODO m1是一个指向Merchanshili的变量
}
}
直接输入引用会得到什么呢?
System.out.println(m1);
得到一个地址,所以我们发现,引用的本质就是类的对象在内存中的一个地址;初始化就是给变量指定一段内存地址、引用赋值事实上就是赋予其自身的地址;
4、类,对象/实例,引用的关系
类和对象的关系:
①类是对象的模板,对象是类的实例。
②一个java程序中类名相同的类只能有一个,也就是说类型不会重名
③一个类可以创建任意多个对象
④一个对象只能根据一个类来创建
引用和类以及对象的关系
①引用必须是也只能是一个类的引用
②引用只能指向其所属类型的类的对象
③相同类型的引用之间可以赋值
④只能铜鼓哦一个对象的引用,来操作一个对象,比如访问成员变量
5.数组对象
数组是一种特殊的类
数组的类名就是类型带上中括号
同一类型的数组,每个数组对象的大小可以不一样,也就是每个数组对象占用的内存的大小可以不一样
可以用引用指向类型相同大小不同的数组,因为她们属于同一类型
引用的数组,可以把类名当成自定义类型,定义引用的数组,甚至多维数组
public class Supermarket {
public static void main(String[] args) {
int[] intArr;//定义一个数组类型的引用
//可以指向不同大小的实例
intArr = new int[1];
intArr = new int[2];
}
}
6.让类的对象有行为(类方法)
方法叫method或者function
可以在类里面定义与类相关的所有方法体,将与类相关的所有操作都在类里面完成,这也是封装的一个重要要求。
public class MerchandiseV2 {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
String madeIn;
// >> TODO 访问修饰符
// >> TODO 返回值类型:无需返回值则用void表示,void是Java中的关键字
// >> TODO 方法名:任意合法的标识符都可以
// >> TODO 参数列表:后续讲解
// >> TODO 方法体:方法的代码
// >> TODO 方法体内部定义的变量叫做局部变量
public void describe() {
double netIncome = soldPrice - purchasePrice;
System.out.println("商品名字叫做" + name + ",id是" + id + "。 商品售价是" + soldPrice
+ "。商品进价是" + purchasePrice + "。商品库存量是" + count +
"。销售一个的毛利润是" + netIncome + "。制造地为" + madeIn);
}
}
使用类方法的方式和使用类成员变量的方式是一样的
都是通过点儿操作符进行访问调用
public class MerchandiseV2DescAppMain {
public static void main(String[] args) {
MerchandiseV2 merchandise = new MerchandiseV2();
merchandise.name = "书桌";
merchandise.soldPrice = 999.9;
merchandise.purchasePrice = 500;
merchandise.count = 40;
merchandise.id = "DESK9527";
merchandise.madeIn = "China";
merchandise.describe();
}
}
7.对于返回值类型,可以是基本返回值类型,也可以是我们自定义的返回值类型;比如:
public HouKaiMao mademyself(){
HouKaiMao houKaiMao=new HouKaiMao();
houKaiMao.name="houkaimao";
houKaiMao.age=34;
houKaiMao.sex='m';
houKaiMao.profix=99;
houKaiMao.describle();
return houKaiMao;
}
HouKaiMao并不是基础返回值类型,但是我们一样可以作为一种返回值进行使用。
8**.参数**
// >> TODO 参数是定义在方法名字后面的括号里的
// >> TODO 参数定义的规范和变量一样,都是类型名字加标识符,这里的标识符我们叫做参数名。
// >> TODO 方法体中的代码可以使用参数
// >> TODO 参数的值在调用方法的时候需要给出,有的资料叫做实参(实际参数)
// TODO 对应的,方法定义这里的参数,叫做形参(形式参数)
// 如果返回值是负数,就代表购买失败,比如库存不足
public double buy(int countToBuy) {
if (count < countToBuy) {
System.out.println("商品库存不够");
return -1;
}
// >> TODO 一个方法可以有多个参数,多个参数之间用逗号隔开
public double buyAndPrintLeft(int countToBuy, boolean printLeft) {
if (count < countToBuy) {
System.out.println("商品库存不够");
if (printLeft) {
System.out.println("商品剩余库存为" + count);
}
return -1;
}
// >> TODO 参数可以是任何类型,包括自定义类型,甚至是自己的类型都没问题
public boolean totalValueBiggerThan(MerchandiseV2 merchandiseV2) {
return count * purchasePrice > merchandiseV2.purchasePrice * merchandiseV2.count;
}
9.参数和返回值的传递
参数的传递,其实就是赋值。左边是形参,右边是括号里的实参。
类似于buy(int countToBuy = (c + 2) * 5)
参数本身可以是一个表达式,只要表达式的值类型可以和参数类型匹配就可以
对于引用类型,参数同样是一个表达式
方法里使用的参数相当于一个局部变量。使用方法前,会用实参给局部变量赋值。
可以把有返回值的方法,当成一个成员变量,当成一个类型为返回值类型的成员变量
关注于返回值并忽略方法执行的部分,使用返回值,就好像在使用一个成员变量
给返回值赋值,并不会影响用来充当返回值的变量
10,this自引用
public void addCount(int count) {
// >> TODO 方法里隐藏着一个this自引用,指向调用这个方法的对象。
// >> TODO 使用一个对象调用方法,也叫做在这个对象上调用方法。因为方法可以访问这个对象的值。
// >> TODO 访问一个成员变量的完整形态,是"this.成员变量的名字"
this.count += count;
public class HouKaimAO {
int age;
char sex;
public void selfintroduce(){
System.out.println(this.age);
System.out.println(this.sex);
System.out.println("this:"+this);
}
}
我们可以看到,this的输出是一个地址,就是引用的地址
11.注释
注释一行
//this is a function for profit calculate
public double calculateProfit() {
double profit = soldPrice - purchasePrice;
return profit;
}
注释多行
/*
多行注释也可以出现
在任何地方
*/
说明(双星)
/**
*
* 对这个类的说明
*
* @author 作者
*
*/
在java是比较注重注释的
我们可以在
https://docs.oracle.com/en/java/javase/11/docs/api/index.html
里面看到javadocs
我们可以尝试以下搜索String类的docs
这就是java的官方docs
那 这个文档怎么生成的呢,事实上,java的注释有一套标准的方法,只要按照这个标准去些,我们就可以使用一个内置的工具将注释生成这种标准的文档,
我们可以复制一段文档里的句子去String类里里面搜索一下
果然有