——不后悔在年少时遇见了那个惊艳了我青春的人,因为她为我的少年时代带来了一束光,从青丝到白发,她都是我心中的白月光。
目录
个人介绍
各位CSDN的友友们,大家好,我是小熙,一个算法小透明,希望在CSDN的大舞台可以和大家一起取得进步(^_^)
个人现状:上个学期在学校的ACM小组学了一个学期的算法,但是世界很大,我的梦想很远,我希望在我年轻的时候可以走出国门,到世界的其他地方看一看,再加上我的算法功底可能真的不太足以支持我在ACM比赛上做出成绩。所以我选择逐渐淡出ACM小组,并把之前的知识和最近所学的整理成博客供大家分享。
概况
(面向对象的基础章节将从8大方面展开,分别是"类和对象","成员方法","成员方法的传参机制","重载(overload)","可变参数","作用域","构造器","thid"。本篇文章将主要讲解类和对象这个方面。
类和对象的引出
为什么Java语言中需要类和对象
方便一个个体(对象)相关的数据的管理(类似于结构体)
举例:就以一个人为例子,与他相关的信息有年龄,名字,工作等,如果每次都用一个单独的变量去存储这些信息,那么就相当于把这个人的信息拆解,显得十分混乱。如下:
public class Exercise2 { public static void main(String[] args) { String person1Name; int person1Age; String person1Job; String person2Name; int person2Age; String person2Job; } }
~所以,类和对象应运而生。
class person{ int age;//年龄 String job;//职业 String name;//姓名 }
类和对象的介绍
类的本质
类的本质:和int ,double,long 这些一样,都是一种数据类型。只不过int ,long ,double这些是系统自带的数据类型,类是程序员自己定义出来的数据类型。
类比解说(对应关系):就好比int这个数据类型可以对应1,3,43,432,42........若干个整数,以class person为例子,一个“person”的类可以对应小明,小李,小王,小刘.....这些人。
对象的本质
对象的本质:对象是一个具体的实际的事物,比如说在"person"类中小王就是一个对象,小李也是一个对象。又称实例
类和对象的关系
类和对象的关系示意图:
从类到对象的过程的不同说法:
1:创建一个对象。
2:实例化一个对象。
3:把类实例化。
对象的内存关系
关于数据类型的知识补充
(1):引用数据类型:比如数组,String,和自己定义出来的class类都是引用数据类型。引用数据类型指向的是对象(也可以理解为地址),而不是具体的值。
(2):基本数据类型:比如int,double指向的就是具体的值。
内存分析示意图
文字描述:
第一步:先将类的信息加载到方法区中。(类加载信息主要包含类的属性和方法)
第二步:在堆中为对象分配不同的空间,根据对象中属性的不同来分配不同的空间。如果是引用数据类型(比如字符串)就分配地址,如果是基本数据类型就分配具体的值。
第三步:堆中的对象建立好了之后就把地址返回到栈区。
图像描述:
内存分析的补充:关于对象与对象名
关于诸如创建对象的语句“Cat cat1=new Cat()”的进一步解读:
首先我们分析这条语句的时候应该从右边往左分析,先分析new Cat()然后分析Cat cat1
(1):new Cat():这才是真正的创建对象的过程。
(2):Cat cat1:将上一步中创建好的对象指向对象名cat1。也可以理解为为上一步创建的对象起一个叫cat1的名字。
对象的分配机制
习题引入一
答案:10
内存图分析
总结
(1):关于语句“Preson p2=p1”:本质上是地址的拷贝,把p1指向的地址拷贝给p2。
(2):还要注意的是在执行语句“person p2=p1”之前p2指向的是一个空地址
习题引入二
内存图分析
创建对象的流程
1:方法区中加载相关的类的信息(类加载只可以加载一次)。
2:在堆中为对象创建空间,默认进行初始化。
3:对象名指向已经创建好的对象。
4:进行指定的初始化。比如p1.age=xxx,p.name="xxx";
Java的内存结构分析
1:栈区:基本数据类型(局部变量)
2:堆区:存放对象或者数组
3:方法区:常量池,比如说字符串(String)和类加载信息
属性
叫法
属性的叫法:可以是属性,成员变量,字段(field)。叫法不同罢了
定义的方法
定义方法:访问修饰符+属性类型+属性名
访问修饰符:protected private public friendly(没有说明的话就是friendly,当前包中的其他类都可以访问,但是就是不能被其他包中的类访问)
属性类型:可以是基本数据类型,也可以是引用数据类型