为了账号安全,请及时绑定邮箱和手机立即绑定

类,对象,成员变量和局部变量,匿名对象

标签:
Java

类是一组相关的属性和行为的集合
属性- 成员变量
行为- 成员方法
成员变量,可以有很多个 零值
成员方法,也可以有很多个,到底具体写几个,看具体的需要
自定义类型的 对象创建 的格式

// 自定义的类型 对象名 = new 自定义类型();
Person person = new Person();

如何使用对象,使用对象其实是使用对象中的成员(成员变量,成员方法)
格式:对象名.成员变量 或者 对象名.成员方法()
取值. 读操作

// 调用成员方法
// 对象名.成员方法();
person.eat();

类与对象的创建内存布局图
一个对象:
一个对象的基本初始化过程
两个对象:
方法的共用
三个对象:
其中有两个引用指向同一个对象
图片描述

package com.newedu.jb.day06;
/**
 * 定义一个学生类
 * @author 小可爱
 *
 */
public class Student {
    //成员变量
    String name; //默认值 null

    int age;//默认值 0

    String school; //默认值 null

    //成员方法

    public void eat(){
        System.out.println("eat()方法被调用了");
    }

    public void sleep(){
        System.out.println("sleep()方法被调用了");
    }

    public void study(){
        System.out.println("Student()方法被调用了");
    }

    public void showInfo(){
        System.out.println("name:"+name+" age:"+age+" school:"+school);
    }
}
package com.newedu.jb.day06;
/**
 * 自定义类Student的测试类
 * @author 小可爱
 *
 */
public class StudentDemo {
    public static void main(String[] args) {
//      int i ;
//      System.out.println(i);

        //创建一个对象
        Student student = new Student();
        student.showInfo();

        //调用对象的成员变量   读值
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(student.school);

        //给对象的成员变量赋值  写值
        student.name = "尚文旭";
        student.age = 20;
        student.school = "中原工学院";

        //调用对象的成员变量   读值
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(student.school);

        //如何调用成员方法呢?
        student.eat();
        student.sleep();
        student.study();
        student.showInfo();

        System.out.println("===================");

        //创建第二个学生对象
        Student student2 = new Student();
        //调用对象的成员变量 ,读值
        System.out.println(student2.name); //输出null
        System.out.println(student2.age); // 0
        System.out.println(student2.school); // 输出null

        //给对象的成员变量赋值 写值
        student2.name = "泡泡";
        student2.age = 18;
        student2.school = "软件学院";

        //调用对象的成员变量 ,读值
        System.out.println(student2.name); //输出新值"泡泡"
        System.out.println(student2.age);//输出新值 18
        System.out.println(student2.school); //输出新值"软件学院"

        //调用对象的成员方法

        student2.eat();
        student2.sleep();
        student2.study();
        student2.showInfo();

        System.out.println("======================");
        // int[] array1 = new int[3];
        // int[] array2 = array1;
        //Student student = new Student();
        // Student类型  对象名 =
        Student student3 = student;

        System.out.println(student3.name);//输出 “尚文旭”
        System.out.println(student3.age);//输出  20
        System.out.println(student3.school); //输出 “中原工学院"

        //给成员变量赋值
        student3.name = "peter";
        student3.age = 21;

        student3.showInfo();
        student.showInfo();
    }
}

成员变量和局部变量的区别
在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
基本类型作为形式参数
引用类型作为形式参数(自定义类作为参数)
基本数据类型和引用数据类型作为方法的参数传递后,
在方法内对参数进行修改,是否会对参数产生影响的问题?

基本数据类型作为方法的形式参数时,做的是“值传递”
引用数据类型作为方法的形式参数时,做的也是“值传递”,但是这次传递的内存地址值
(两个变量引用了同一块内存地址值。)

package com.newedu.jb.day06;
/**
 * 演示形式参数的问题:
 *     自定义类型做为形式参数的问题
 * @author 小可爱
 *
 */
public class ParameterMethod {
    public void change(int a ,int b){
        // 这里的a和b 是重新定义的局部变量(是因为在方法内定义的) a = 10,b = 20;
        a *=2; // 20;
        b +=a; // 40
        // 一旦离开了 方法体,这里面的局部变量a和b就消失了
    }
    /**
     * 自定义类型Student作为形式参数传递
     * 引用类型作为形式参数传递
     * @param stu
     */
//  public void change2{
//     Student stu ;
    // stu  = new Student();
    // Student stu2 = new Student();
    // stu = stu2;
//}
    public void change2(Student  stu){
        // 相当于 在这里定义了一个Student对象 stu; Student stu = ?
        //给我们的成员变量 age加上100
        stu.age += 100;
        //调用 成员方法()
        stu.showInfo();
    }
}
package com.newedu.jb.day06;
/**
 * 测试类,演示自定义类型作为形式参数的问题
 * @author 小可爱
 *
 */
public class ParameterMethodDemo {
    public static void main(String[] args) {

        //创建一个对象
        ParameterMethod pm = new ParameterMethod();

        int a = 10;
        int b = 20;
        System.out.println("a:"+a+"b:"+b); //a:10 b:20
        //调用对象的成员方法
        pm.change(a, b);
        System.out.println("a:"+a+"b:"+b); // a:10 b:20
                                           // a:20 b:40

        System.out.println("=================");
        Student stu = new Student();
        stu.showInfo(); // name:null age:0 school:null
        pm.change2(stu);
        stu.showInfo(); // name:null age:100 school:null
    }
}

匿名对象:
匿名对象:就是没有名字的对象。
是对象的一种简化表示形式
匿名对象的两种使用情况
对象调用成员仅仅一次的时候
作为实际参数传递
代码举例:

package com.newedu.jb.day06;
/**
 * 匿名对象的创建与使用
 * @author 小可爱
 *
 */
public class AnonymityObjectDemo {
    public static void main(String[] args) {
        // 匿名对象,就是没有名字的对象

//      Student stu = new Student();

        (new Student()).name = "尚文旭";
        new Student().age = 20;

        new Student().showInfo();

        // 匿名对象有短板: 只能用一次。

        // 匿名对象的用途:
        // A:对象调用成员仅仅一次的时候
        // B:作为实际参数传递
        ParameterMethod pm  = new ParameterMethod();
//      Student stu = new Student();
        pm.change2(new Student());

    }
}
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件工程师
手记
粉丝
51
获赞与收藏
617

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消