类与对象/对象的创建流程/this关键字

类与对象

1、类是抽象的,概念的,代表一类事物,比如人类,猫类,狗类 他是数据类型!!
2、对象是具体的,实际的,代表一个事物,既是一个实例!万物皆对象!
3、类是对象的模板。对象是类的一个个体,对应着一个实例!

属性/成员变量

属性时类的一个组成部分,一般时基本数据类型,也可以是引用类型(对象,数组)。 属性给也叫做成员变量!

属性的注意事项:

  1. 属性的定义同变量。多了一个访问修饰符 (private 、public、 protect)控制访问范围
  2. 属性的定义可以为任意类似,包含基本类型和引用类型。
  3. 属性如果不赋值,有默认值,规则和数组一组!
类型默认值
int0
short0
byte0
long0
double0.0
float0.0
char\u0000
booleanfalse
Stringnull

对象的创建流程

类与对象的内存分配机制★

 Person p1=new Person();
 p1.age =10;
 p1.name ="小明";
 Person p2 =p1 ;//把p1 赋给p2,让p2 指向p1;
 System.out.println(p2.age);

当执行Person p1=new Person();时


当执行 p1.age =10;
p1.name =“小明”;
在这里插入图片描述

执行 后 Person p2 =p1 ;//把p1 赋给p2,让p2 指向p1;

在这里插入图片描述

就是相当与把 p1 的地址复制给了 p2
(p2 就成了p1 的另一个名字 大概就是这个意思!)

类和对象的内存分析机制:

栈:主要是存放基本数据类型(局部变量);
堆:存放对象(要是引用类型存地址);
方法区:常量池、加载类的 属性信息,和方法信息;

例如:
对于程序

Person p= new Person();
p.name="jack";
p.age = 10;

1、先加载person类信息(属性,方法,只加载一次,加载多了没有意义)
2、在堆中分配空间,(分配属性的空间 都为默认值。)
3、完成对象初始化,先进行默认初始化。在进行显式初始化,最后进行构造器初始化。
4、再对象再堆中的地址,返回给p。(p是对象的引用)

this关键字

什么是this?
	Java虚拟机会给每一个对象分配一个this,代表当前对象。

举个栗子吧:

		第一句话: 小明:”我的眼睛受伤了。“ 我们从这句话得出了,谁的眼睛受伤了呢?小明。
		第二句话:	李华:”我的眼睛受伤了。“我们从这句话得出了,谁的眼睛受伤了呢?李华
		要是   小明和李华说了:”眼睛受伤了“,我们根本就不知道是谁受的伤。所以这里的this就向
		我们说的 ”我的“ 的意思,说个”手机“我们不知道是谁的,你说”我的手机“是不能表达出意思!

上代码!

public class ThisKeyWords {
    public static void main(String[] args) {
        Dog dog = new Dog("lala",3);
        dog.info();
        }
    }

class Dog{
    String name;
    int age;

    //当没有this关键字的时候,就出现了一个问题。
    //根据变量的作用域的原则。
    // 构造器的name是局部变量,不是属性,构造器的age也是一样的。
    // 根据就近原则。发现name ,age,还是原来的默认值。

    public Dog(String name, int age) {
        name = name;
        age = age;
    }


    public void info(){//成员方法,输出属性信息

        System.out.println(name+"\t"+age+"\t");
    }
 }

运行结果:
在这里插入图片描述
为什么出现了 null 和 0这种结果呢?

当没有this关键字的时候,就出现了一个问题。
根据变量的作用域的原则。
构造器的name是局部变量,不是属性,构造器的age也是一样的。
根据就近原则。发现name ,age,还是原来的默认值。

public class ThisKeyWords {
    public static void main(String[] args) {
        Dog dog = new Dog("lala",3);
        dog.info();
        }
    }

class Dog{
    String name;
    int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void info(){//成员方法,输出属性信息

        System.out.println(name+"\t"+age+"\t");
    }




}

运行结果:
在这里插入图片描述

加了this是不是就出现我们想要的结果了呢。
当然你可以这样写

   public Dog(String dName,int  dAge){
   name = dName;
   age=dAge;
}

这样也是可以的。

在这里插入图片描述

	简单的说:那个对象调用,this就代表这那个对象

注意事项:

  1. this关键字可以用来访问本类的属性、方法、构造器。
  2. this可以用来区分本类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表);
  4. 访问构造器的语法:this(参数列表)。(注意只能再构造器中访问另外一个构造器,必须放在第一条语句!!!。)
  5. this不能再类定义的外部使用,这能在类定义的方法内使用!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值