JAVA学习-类与对象(韩顺平java-基础篇)

1.类定义

类:类代表某类数据的共性,例如 花猫 白猫 都属于猫类。类也是一种数据类型。

数据类型代表同种数据的类型,因此 int 与 猫类 都属于数据类型。一类是整数数据,一类是猫数据。

类具有属性与方法,例如猫类的属性可以有 花色,年龄等,方法是类的行为,可以理解为这类数据可以干什么。

对象就是具有不用的属性和方法的类。即类的实例化。java中创建对象: 类名 对象名 = new 类名()    例: Cat cat1 = new Cat()

2.对象内存分析

类是引用数据,引用数据保存的地址。

在 new Cat () 创建对象时,会先将类信息加载至方法区。

同时在堆开出一块空间,存放数据或地址(字符串存放在方法区的常量池,堆空间中存放字符串的空间保存的是方法区内字符串对应的地址)。

再将堆内存的地址返回至栈内存保存。其中 cat 是对象名,堆中的空间才是对象本身。

3.属性与方法

3.1 属性

  成员变量 =属性 = field( 字段) ,属性可以是基本数据类型,也可以是引用类型 (对象,数组)。
属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;  例子: public int age。
修饰符: 控制属性的访问范围,有四种访问修饰符 public, proctected, 默认 , private , 后面会详细介绍。
属性如果不赋值,有默认值,规则和数组一致。具体说: int 0 ,short 0, byte 0, long 0, float 0.0,double 0.0 char \u0000 boolean false String null。
访问属性:对象名.属性名  

3.2 成员方法

访问修饰符 返回数据类型 方法名(形参列表 .. {// 方法体
语句;
return 返回值 ;
1) 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int num2)。 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型 的参数.
2)返回数据类型:表示成员方法输出 , void 表示没有返回值
3)方法主体:表示为了实现某一功能代码块.方法不能嵌套定义
4)return 语句不是必须的。(若是void 则可以没有return)一个方法最多有一个返回值 [思考,如何返回多个结果 返回数组],返回类型可以为任意类型,包含基本类型或引用类型 ( 数组,对象),如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值;而且要求返回值类型必须和 return 的值类型一致或兼容
运行程序时,栈空间是分块使用的,主程序会占用一块空间。当运行到方法时,会开辟出新的空间 来进行方法的计算,运行到方法的return时 或者 运行结束,则 方法空间被销毁,并将值返回到main空间内相应的位置。

3.2.1 方法传参机制

基本数据类型传参传递的是值,形参的改变不影响实参。具体来说就每当调用一个方法时,会在栈内分配一块专门用来执行方法的空间,对于基本数据类型来说,该空间内的参数是独立的,不影响其他的参数。

引用数据类型传参传递的是地址,因此分配的方法空间参数改变时,会影响其他的参数。(形参 实参 都指向同一个堆地址空间,所以实参 形参 会互相影响)

3.2.2 方法重载

java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!

返回类型 不同 其他相同 仍然不算重载。

3.2.3 可变参数

java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。形式:访问修饰符 返回类型 方法名 ( 数据类型 ... 形参名 ){}。
 
 

4.作用域

5.构造器

用来在创建对象时初始化属性。形式:[修饰符] 方法名(形参列表){}。构造器 不是 创建对象,而是对对象的初始化 先new 创建 对象 系统再自动调用, 利用构造器初始化。

分析上图对象创建流程:

执行 new Person(xxx)后:
1.在方法区加载 类信息
2.堆中分配空间(得到一个地址)
3.默认初始化 int 为0 ,String 为 null
4.再 根据类属性 初始化 age = 90 name = null
5.再根据构造器初始化 name = 小倩 age = 20
6 将堆空间(对象的本质)地址 返回 给P。(p只是对象名,对对象的引用,对象本质是堆空间)

6 this关键字

观察代码发现, 若构造器的形参名 和 属性名 重名,则相当于在构造器内声明了一个 局部变量 name,然后传入参数时 String name = 传入实参。再进行 name = name 。此时name将原本代表属性的 name 替代,此时的 name = name 不代表 将传进的参数 赋给 属性name 而代表 将传进的参数name 赋给 自己 name 。 当调用方法 打印 属性时 ,就会发现 属性并没有被 构造器 初始化。因此引出this。

this 保存 一个 指向 具体对象的 地址。随着对象的创建 而产生。如下图,this与对象名 一样 都代表堆对象的引用。this.XX  可以调用 属性 方法,构造器等。。

 

 
 

 

 

 
 
 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值