JavaSE学习:第五章、类和对象

本文介绍了Java中对象的创建过程,包括类加载、堆内存分配、默认及指定初始化,并探讨了方法执行机制。此外,还讲解了基本数据类型与引用数据类型的传参差异,以及对象拷贝的方法。通过实例代码展示了如何判断数字奇偶性,并提醒开发者注意参数传递时的影响。
摘要由CSDN通过智能技术生成

1、对象存在形式:

public class First {
    public static void main(String[] args) {
    	// Cat cat;
    	// cat = new Cat();
    	
        Cat cat = new Cat();
        cat.name = "小黑";
        cat.age = 19;
        cat.color = "red";
    }
}

class Cat {
    String name;
    int age;
    String color;
}

在这里插入图片描述

Person p1 = new Person();
p1.age = 10;
p1.name = "liming";
Person p2 = p1;
System.out.println(p2.age);  // 10

在这里插入图片描述

2、类和对象的内存分配机制:

1、栈:一般存放基本数据类型(局部变量)。
2、堆:存放对象(如Cat cat,数组等)。
3、方法区:常量池(常量,如字符串值),类加载信息。

3、java创建对象流程简单分析:

1、先加载类信息(主要是属性、方法信息),类加载只会加载一次,就算再创建一个对象,也只会加载一次。
2、堆中分配空间,进行默认初始化(String->null, int->0)。
3、将堆中空间地址分配给p,p就指向该对象。
4、进行指定初始化,比如:p.name = “jack”, p.age=10

4、java方法执行机制:

在这里插入图片描述

5、方法练习题:

第一题:输入一个数判断奇偶

public class First {
    public static void main(String[] args) {
        AA aa = new AA();
       if (aa.isOdd(3)) {
           System.out.println("是偶数");
       } else {
           System.out.println("是奇数");
       }
    }
}

class AA {
    public boolean isOdd(int n1) {
        return n1 % 2 == 0;
    }
}

6、注意事项:

6.1、基本数据类型传参机制:值拷贝

1、方法里面的变量不会影响主栈里面的变量。
因为他调用方法的时候会产生一个新栈,两个栈互不影响。

在这里插入图片描述

public class text {
    public static void main(String[] args) {
        AB ab = new AB();
        int n1 = 10;
        int n2 = 20;
        ab.Text(n1, n2);
        System.out.println("n1=" + n1 + "n2=" + n2);  // 10, 20
    }
}

class AB {
    public void Text(int n1, int n2) {
        System.out.println("n1=" + n1 + "n2=" + n2);  // 10, 20

        int temp;
        temp = n1;
        n1 = n2;
        n2 = temp;

        System.out.println("n1=" + n1 + "n2=" + n2);  // 20, 10
    }
}

6.2、引用数据类型传参机制:地址拷贝(形参影响实参)

1、方法里面修改值,也会影响主栈的值。
在这里插入图片描述

public class text {
    public static void main(String[] args) {
        Person p = new Person();
        p.age = 10;

        B b = new B();
        /*
			1、传递对象实际上是传递的地址值,该地址值指向堆中的空间。
			 b.test(p); p:就是new Person的地址,将该方法指向new Person的空间
		*/
        b.test(p);  
        System.out.println(p.age);  // 1000

    }
}

class Person {
    String name;
    int age;
}

class B {
    public void test(Person p) {
        p.age = 1000;
    }
}

7、对象拷贝:

public class Persons {
    public static void main(String[] args) {
        Person1 person1 = new Person1();
        person1.age = 10;
        person1.name = "liming";

        myTools myTools = new myTools();
        Person1 p2 = myTools.copyObj(person1);
    }
}

class Person1 {
    int age;
    String name;
}

class myTools {
    public Person1 copyObj(Person1 p1) {
        Person1 person2 = new Person1();
        person2.name = p1.name;
        person2.age = p1.age;
        return person2;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值