首页 > 其他 > 详细

对象创建

时间:2020-08-11 00:21:18      阅读:90      评论:0      收藏:0      [点我收藏+]
//学生类
//学生类是一个模板,描述了所有学生的共同特征【状态+行为】
//当前类只描述学生的状态信息【属性】
//Student是类,属于引用数据类型,这个类型名就是:Student
public class Student{

    //类体 = 属性 + 方法

    //属性【存储数据采用变量的形式】
    //由于变量定义在类体当中,方法体之外,这种变量称为成员变量
    //所有学生都有学号信息,但每个学生的学号都是不一样
    //所有要访问这个学号必须先创建对象,通过对象去访问学号信息
    //学号信息不能直接通过“类”去访问,
    //所以这种成员变量又被叫做:实例变量
    //对象又称为实例,实例变量又称为对象变量【对象级别的变量】
    //不创建对象,no变量的内存空间是不存在的,
    //只有创建了对象,这个no变量内存空间才会创建
    int no;

    //姓名
    String name;

    //年龄
    int age;

    //性别
    boolean sex;

    //住址
    String addr;
}
/*
    对象的创建和使用
*/
public class OOTest01
{
    public static void main(String[] args){
        
        //int是基本数据类型 i是一个变量名
        //10是一个int类型的字面值
        int i = 10;
        
        //通过一个类可以实例化N个对象
        //实例化对象的语法:new 类名();
        //new是java语言当中的一个运算符
        /*
            new运算符的作用是创建对象,
            在JVM堆内存当中开辟新的内存空间
        */

        /*
            方法区内存:在类加载的时候,
                class字节码代码片段被加载到该内存空间当中
            栈内存(局部变量):方法代码片段执行的时候,
                会给该方法分配内存空间,在栈内存中压栈
            堆内存:new的对象在堆内存中存储
        */

        //Student是一个引用数据类型,
        //s是一个变量名 new Student()是一个学生对象
        //s是一个局部变量【在栈内存中存储】

        //什么是对象?
        //    new运算符在堆内存中开辟的内存空间称为对象
        //什么是引用?引用是一个变量,
        //    只不过这个变量中保存了另一个java对象的内存地址

        //java语言当中,
        //程序员只能通过“引用”去访问堆内存当中对象内部的实例变量
        Student s = new Student();

        //访问实例变量的语法格式:
        //  读取数据:引用.变量名
        //  修改数据:引用.变量名 = 值
        int stuNo = s.no;
        String stuName = s.name;

        System.out.println("学号 = " + stuNo); //0
        System.out.println("姓名 = " + stuName); //null

        //再通过类实例化一个全新的对象
        //stu是一个引用 也是一个局部变量 Student是变量的数据类型
        Student stu = new Student();

    }
}

/*
    局部变量在栈内存中储存
    成员变量中的实例变量在堆内存的Java对象内部存储
    实例变量是一个对象一份,100个对象有100份
*/

技术分享图片

执行到new的时候

技术分享图片

再一个new的时候

 

//家庭住址类
public class Address
{
    //属性【以下都是成员变量之实例变量】
    //城市
    //String是一种引用数据类型,city是一个变量名,属于实例变量
    //city是一个引用
    String city;

    //街道
    String street;

    //邮编
    String zipcode;
}
//用户类
public class User
{
    //属性【以下都是成员变量之实例变量】

    //用户编号
    //int是一种基本数据类型:整数型
    //no是一个实例变量,是个引用
    int no;
    
    //用户名
    //String是一种引用数据类型:代表字符串
    //name是一个实例变量,是个引用
    String name;

    //家庭地址
    //Address是一种引用数据类型:代表家庭住址
    //addr是一种实例变量,是个引用
    Address addr;
}
//测试类
public class OOTest02
{
    public static void main(String[] args){
        
        //创建user对象
        //u是局部变量,是一个引用
        User u = new User();

        //输出User对象内部实例变量的值
        System.out.println(u.no); //0
        System.out.println(u.name); //null
        System.out.println(u.addr); //null

        //修改User对象内部实例变量的值
        u.no = 110;
        u.name = "jack"; //"jack"是一个java对象,属于String对象
        u.addr = new Address();

        //在main方法当中目前只能看到一个引用“u”
        //一切都只能通过u进行访问
        System.out.println(u.name + "住在的城市:" + u.addr.city);
        System.out.println(u.name + "住在的街道:" + u.addr.street);
        System.out.println(u.name + "邮编:" + u.addr.zipcode);

        u.addr.city = "北京";
        u.addr.street = "朝阳";
        u.addr.zipcode = "11111111";

        System.out.println(u.name + "住在的城市:" + u.addr.city);
        System.out.println(u.name + "住在的街道:" + u.addr.street);
        System.out.println(u.name + "邮编:" + u.addr.zipcode);
    }
}

技术分享图片

一开始

技术分享图片

最终版

 

public class OOTest03
{
    public static void main(String[] args){
        
        //u是引用
        //u是局部变量
        User u = new User();

        //a是引用
        //a是局部变量
        Address a = new Address();
        u.addr = a;

        System.out.println(u.addr.city); //null

        a.city = "天津";

        System.out.println(u.addr.city); //天津
    }
}

技术分享图片

 

//丈夫类
public class Husband
{
    //妻子姓名
    String name;

    //丈夫对象中含有妻子的引用
    Wife w;
}
//妻子类
public class Wife
{
    //丈夫姓名
    String name;

    //妻子对象中含有丈夫的引用
    Husband h;
}
public class OOTest04
{
    public static void main(String[] args){
        
        //创建一个丈夫对象
        Husband zs = new Husband();
        zs.name = "张三";

        //创建一个妻子对象
        Wife xo = new Wife();
        xo.name = "小欧";

        //结婚【能通过他们找到对方】
        zs.w = xo;
        xo.h = zs;

        //得到以上“man”的妻子的名字
        System.out.println(zs.name + "之妻:" + zs.w.name);
    }
}

技术分享图片

技术分享图片

 

//顾客类
public class Customer
{
    //id
    int id;
}
//测试程序
public class OOTest05
{
    public static void main(String[] args){
        
        Customer c = new Customer();
        System.out.println(c.id); //0
        
        //以下程序编译可以通过,因为符合语法
        //运行出现空指针异常
        //空引用访问“实例”相关的数据一定会出现空指针异常
        //java.lang.NullPointerException
        c = null;
        System.out.println(c.id);
    }
}
//“实例”相关的数据表示:
//这个数据访问的时候必须由对象的参与。
//这种数据就是实例相关的数据

 

 

//计算机类
class Computer
{
    String brand;
    String style;
    String color;
}

//学生类
class Student
{
    int no;
    String name;
    Computer notepad;
}

//测试类
public class 教师版OOTest06
{
    public static void main(String[] args){
        
        //创建笔记本电脑对象
        Computer biJiBen = new Computer();

        //不采用系统默认值,手动赋值
        biJiBen.brand = "华硕";
        biJiBen.style = "C00";
        biJiBen.color = "黑";

        //创建学生对象
        Student zhangsan = new Student();
        //不采用系统默认值,手动赋值
        zhangsan.no = 123;
        zhangsan.name = "张三";
        zhangsan.notepad = biJiBen;

        //让这个学生和笔记本对象产生关系
        //【通过学生找到他的笔记本电脑】
        //想知道张三的笔记本的品牌
        System.out.println(zhangsan.notepad.brand);

        //张三买了台新电脑,原来的电脑扔了【垃圾回收了】
        zhangsan.notepad = new Computer();
        System.out.println(zhangsan.notepad.brand); //null

    }
}

 

对象创建

原文:https://www.cnblogs.com/Lerresino/p/13473101.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!