一、类的组成
类由属性和方法组成,就比如cat这个类中,有着猫的各种属性,以及猫的行为
二、类和对象的关系
1.类是抽象的,而对象是具体的
2.类是对象的一个模板
3.我们常常将由类创造一个对象叫做类的实例化,而我们的对象就叫做一个个实例
三、对象在内存中的分布情况
看下图
对象中存放的是地址(栈中)
地址指向的是对象中的各种属性
根据属性的数据类型不同,有些位置存放数据,有些地方存放地址(例如字符串类型)
存放的地址都指向了方法区的常量池这个位置
常量池这个位置就是放着我们所存放的一部分数据。
四、类中的属性
1.属性的名称
属性=成员变量=字段
2.属性的定义
属性的定义格式为
访问修饰符 +数据类型+数据名字
访问修饰符有4种:包括public,protected,默认和private,一共4种
属性的定义可以是任何类型,包括基本数据类型和引用类型
属性要是没有给初始化,那么就是默认值,默认值与之前在数组中的那些相同
五、创建对象和访问属性
1.创建对象
Cat cat=new cat();
2.访问属性与内存分配机制
与数组的赋值一样,两个类之间相互赋值,都是把一个类的地址转给另外一个地址,是一种地址赋值。
六、类和对象的内存分配机制
1.java内存结构分析
1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(Cat cat , 数组等)
3) 方法区:常量池(常量,比如字符串), 类加载信息
2.java创建对象的简单流程分析
Person p = new Person();
p.name = “jack”;
p.age = 10
解答:首先,加载person类的信息,然后在堆里面分配空间,把地址赋值给p,最后在进行赋值
七、成员方法的使用来完善类
1.成员方法的调用机制
解释如上图所示
当执行到方法时,会在栈中开辟一个独立的空间但返回时就会回到调用的地方
2.成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..)
{//方法体 语句;
return 返回值; }
1.访问修饰符:略,必须要写,用来决定这个函数在哪里可以使用,是非常重要的
2.访问数据类型
一个方法最多有一个返回值,怎么实现返回多个结果呢,返回一个数组,将你要返回的所有值都存放在这个数组中
如果方法的类型是void,也可以采用只写return来直接截断方法的进行
3.方法名
须要严格遵守驼峰命名法,并且最好一看到就能知道它的意思
4.形参列表
列表中可以没有参数,也可以有多个参数
可以是任意类型的
传入的值都必须要和我们所定义的相等或者是可以互相兼容
实参和形参的顺序,类型,个数都必须完全一致
5.方法体
方法体就是和普通写程序一样,但是要注意的是里面不可以再嵌套定义方法
return语句不是必须的
八、方法的调用
1.在同一个类中,可以直接调用
2.跨类调用,基本准则就是要通过创建对对象来调用,但是这个还是要看方法的权限,这个要在后面才细讲
九、课堂作业
//1) 编写类 AA ,有一个方法:判断一个数是奇数 odd 还是偶数, 返回 boolean
// 2) 根据行、列、字符打印 对应行数和列数的字符,比如:行:4,列:4,字符#,则打印相应的效果
// 老师建议:一定要自己写一遍,不要嫌太简单.
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner myScanner=new Scanner(System.in);
int number=myScanner.nextInt();
AA tool=new AA();
boolean flag= tool.deter(number);
int row,arrang;
char pattern;
row=myScanner.nextInt();
arrang=myScanner.nextInt();
// System.out.print(arrang);
pattern=myScanner.next().charAt(0);
System.out.println(flag);
tool.prin(row,arrang,pattern);
}
}
class AA
{
public boolean deter(int number)
{
if(number%2==0) //偶数
{
return false;
}
else
{
return true;
}
}
public void prin(int row,int arrang,char pattern)
{
// System.out.print(arrang);
for(int i=0; i<row;i++)
{
for(int j=0;j<arrang;j++)
{
System.out.print(pattern+" ");
}
System.out.println();
}
}
}