Java基础012-面向对象-对象的创建和使用

对象的创建和使用

通常情况下,一个类不能直接使用,需要根据类创建一个对象才能使用。

对象使用步骤:

  1. 导包:
    格式:import [包名称],[类名称];
    对于和当前类同属一个包下,可以省略导包语句不写。
  2. 创建:
    格式:[类名称] [对象名称] = new [类名称]();
  3. 使用:
    使用成员变量格式:[对象名].[成员变量名];
    使用成员方法格式:[对象名].[成员方法名]([参数]);

举例1:对象的使用,和Student类位于同一个包下。(导包语句可以省略,成员变量不是Public也可以使用)

package cn.test01;	//和Student类位于同一个包下。

public class Test {
    public static void main(String[] args) {
        //1、导包
        //因为和Student都位于cn.test01;这个包下
        
        //2、创建对象
        Student stu=new Student();
        //3、成员变量使用
        System.out.println(stu.name);
        System.out.println(stu.age);
        stu.name = "张三";
        stu.age = 18;
        System.out.println(stu.name);
        System.out.println(stu.age);
        //4、成员方法使用
        stu.eat();
        stu.sleep();
        stu.study();
    }
}
package cn.test01;
/*
    定义一个类,模拟学生
    属性:姓名、年龄
    行为:吃饭、睡觉、学习

*/
public class Student {
    String name;
    int age;
    public void eat(){
        System.out.println("吃饭!");
    }
    public void sleep(){
        System.out.println("睡觉!");
    }
    public void study(){
        System.out.println("学习!");
    }
}

举例2:对象的使用,和Student类位于不同个包下。(导包语句不可以省略,成员变量是Public才可以使用)

package cn.test01;

import cn.test02.Phone;

public class Test {
    public static void main(String[] args) {

        //根据Phone类创建对象pho
        Phone pho = new Phone();

        System.out.println(pho.brand);  //null
        System.out.println(pho.price);  //0.0
        System.out.println(pho.color);  //null
        pho.brand = "华为";
        pho.price = 3888;
        pho.color = "白色";

        pho.call("任正非");
        pho.sendMessage();
        
        System.out.println(pho.brand);  //华为
        System.out.println(pho.price);  //3888
        System.out.println(pho.color);  //白色
    }
}
package cn.test02;
/*
    定义一个类,用来模拟手机。
    成员变量:品牌、价格、颜色
    成员方法:打电话、群发短信
*/
public class Phone {
    //成员变量
    public String brand;   //品牌
    public double price;   //价格
    public String color;   //颜色

    //成员方法
    //打电话
    public void call(String who){
        System.out.println("给"+who+"打电话!");
    }
    //群发消息
    public void sendMessage(){
        System.out.println("群发短信!");
    }
}

举例3:对象类型作为方法的参数。

package cn.test01;

import cn.test02.Phone;

public class Test {
    public static void main(String[] args) {

        //根据Phone类创建对象pho
        Phone pho = new Phone();

        pho.brand = "华为";
        pho.price = 3888;
        pho.color = "白色";

        method(pho);    //传递进去的参数其实是地址值。

    }
    public static void method(Phone ph){
        ph.call("任正非");
        ph.sendMessage();
        System.out.println(ph.brand);  //华为
        System.out.println(ph.price);  //3888
        System.out.println(ph.color);  //白色
    }
}
package cn.test02;
/*
    定义一个类,用来模拟手机。
    成员变量:品牌、价格、颜色
    成员方法:打电话、群发短信
*/
public class Phone {
    //成员变量
    public String brand;   //品牌
    public double price;   //价格
    public String color;   //颜色

    //成员方法
    //打电话
    public void call(String who){
        System.out.println("给"+who+"打电话!");
    }
    //群发消息
    public void sendMessage(){
        System.out.println("群发短信!");
    }
}

举例4:对象类型作为方法的返回值。

package cn.test01;

import cn.test02.Phone;

public class Test {
    public static void main(String[] args) {

        //根据Phone类创建对象pho
        Phone ph = method();
        ph.call("任正非");
        ph.sendMessage();
        System.out.println(ph.brand);  //华为
        System.out.println(ph.price);  //3888
        System.out.println(ph.color);  //白色


    }
    public static Phone method(){
        Phone pho = new Phone();

        pho.brand = "华为";
        pho.price = 3888;
        pho.color = "白色";
        return pho;
    }
}
package cn.test02;
/*
    定义一个类,用来模拟手机。
    成员变量:品牌、价格、颜色
    成员方法:打电话、群发短信
*/
public class Phone {
    //成员变量
    public String brand;   //品牌
    public double price;   //价格
    public String color;   //颜色

    //成员方法
    //打电话
    public void call(String who){
        System.out.println("给"+who+"打电话!");
    }
    //群发消息
    public void sendMessage(){
        System.out.println("群发短信!");
    }
}

举例5:匿名对象

package cn.test01;

public class Test {
    public static void main(String[] args) {
        
        //匿名对象
        new Person().sayHello("张三");
    }
}
package cn.test01;

public class Person {
    
    String name = "李四";    //姓名

    public void sayHello(String name) {
        System.out.println("你好"+name+",我是"+this.name+"。");
    }
}

举例6:匿名对象作为方法的参数。

package cn.test01;

public class Test {
    public static void main(String[] args) {

        sayHello(new Person().name);
    }

    public static void sayHello(String name) {
        System.out.println("你好"+name);
    }
}
package cn.test01;

public class Person {

    String name = "张三";    //姓名
}

根据上述代码描述代码内存中运行的状态:

  1. 代码在运行前进行编译,编译成的Test.classPhone.class文件存放在方法区(method Area),包括其中的成员变量和成员方法等。
  2. 然后代码运行,先将带有main()方法的.class文件进栈(Stack),第一条语句根据Phone类创建pho,首先在栈中创建Phone类型的变量pho,再将new出来对象Phone()的放入堆(Heap)中,包括里面的成员变量,并附上初值,也包括成员方法在方法区的首地址。
  3. 再将创建好的对象首地址放入左侧创建好的变量当中,第一条语句执行完成。
  4. 第二条语句,打印pho对象中的brand变量值,首先根据在栈中存储的Phone类型的变量pho中存储的地址找到在堆中存储的对象中brand变量,然后将里面的数据打印出来。
  5. pho.brand = "华为";语句,首先根据对象名称中存储的地址找到在堆中的对象中brand变量,将"华为"字符串赋值给它。
  6. pho.call("任正非");语句,首先根据对象变量中存储的地址找到堆中的对象,再找到里面的call方法地址,根据地址在方法区找到该方法,该方法进栈(压栈)。运行完之后出栈。继续main方法。
  7. main方法在栈中运行到最后,main方法出栈,内存清空,程序停止。
  8. 如果同时创建的是两个对象,会在堆中重新new一个对象,方法区不变。两个对象各管各的。
  9. 如果将Phone类型的pho中存储的对象地址值,赋值给另一个Phone类型的变量,那么两个变量同时使用一个对象。
  10. 对象类型作为方法的参数时,传递的参其实就是对象的地址。对象类型作为返回值同理。
  11. 不同的包中可以定义相同名称的类。
  12. 匿名对象只能唯一使用一次,下次在使用不得不创建一个新的对象,如果对象只使用一次建议使用匿名对象。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值