Surpass Day5——Java面向对象的创建和使用

目录

1、成员/实例/对象变量、实例(对象)

1.1 对象的基本性质

1.2 成员变量、实例变量、静态变量(类变量)、局部变量

2、对象的创建和使用

2.1 对象和引用的定义

2.2 对象的创建

2.3 JVM三大内存

2.4 对象的访问

2.5 实例

2.6 夫妻类

2.7 JVM

2.7.1 内存区

2.7.2 垃圾回收器【自动垃圾回收机制、GC机制】

2.8 空指针异常

2.9 关联关系和继承关系



1、成员/实例/对象变量、实例(对象)

1.1 对象的基本性质

1)类体=属性+方法,属性【存储数据采用变量的形式】;

2)对象又被称为实例,实例变量又被称为对象变量【对象级别的变量】;

3)不创造对象,这个变量的内存空间是不存在的,只有创建了对象,这个变量的内存空间才会被创建;

1.2 成员变量、实例变量、静态变量(类变量)、局部变量

1)成员变量:作用范围是整个类,相当于C中的全局变量,定义在方法体和语句块之外,一般定义在类体当中;成员变量包括实例变量和静态变量(类变量);

成员变量没有手工赋值的话,系统默认值如下:

数据类型                                默认值
​
————————————————————————————————————————————————
​
byte,short,int,long                     0;
​
float,double                            0.0;
​
boolean                               false;
​
char                                  \U000;
​
引用数据类型                             null;

2)实例变量:独立于与方法之外的变量,无static修饰,声明在一个类中,但在方法、构造方法和语句块之外,数值型变量默认值为0,布尔型默认值为false,引用类型默认值为null;

实例变量不能通过“类名”去访问,必须通过引用;

实例变量在堆内存的java对象内存中存储;

3)静态变量(类变量):独立于方法之外的变量,用static修饰,默认值与实例变量相似,一个类中只有一份,属于对象共有,存储在(方法区内存)静态存储区,经常被声明为常量,调用一般是类名.静态变量名,也可以用对象名.静态变量名调用;

public static String level = "SSS"; *//成员变量、静态变量(类变量)*

4)局部变量:类的方法中的变量,访问修饰符不能用于局部变量,声明在方法、构造方法或语句块中,在栈上分配,无默认值,必须经初始化;


2、对象的创建和使用

2.1 对象和引用的定义

new运算符在栈内存中开辟的内存空间称为对象;

引用是一个变量,只不过这个变量中保存了另一个java对象的内存地址;

1)与C语言中的指针不同,指针可以指向内存空间的任意一块地址

2)java中无指针,不能直接操作堆内存,只能通过“引用”访问堆内存中对象的实例变量,保证了java语言的安全性)

2.2 对象的创建

1)通过一个类可以实例化多个对象,实例化的语法:new 类名();

2)new是java语言中的一个运算符,其作用是创建对象,在JVM堆内存中开辟新的内存空间;

int i = 10;

int 是一个基本数据类型;i是一个变量名;10是int类型的字面值;

Student s = new Student( );

Student 是一个引用数据类型s局部变量在栈内存中存储】表示引用new Student()是创建一个学生对象;

2.3 JVM三大内存

方法区内存:在类的加载的时候,class字节码代码片段会被加载到该内存空间;

栈内存(局部变量):方法代码片段在执行的时候会给该方法分配内存空间,在栈内存中压栈;  

堆内存:new的对象在堆内存中存储;

2.4 对象的访问

访问实例变量的语法格式:

读取数据:引用.变量名;

修改数据:引用.变量名 = 值;

2.5 实例

//用户类
public class User{
    int no;//基本数据类型 实例变量 
    String name;//引用数据类型 实例变量
    Address addr;//引用数据类型  实例变量
}
//家庭住址类
public class Address{
    String city;//引用数据类型  实例变量  city是一个引用:保存内存地址的一个变量,该变量保存内存地址指向了堆内存;
    String street;
    String zipcode;
}
//测试类1
public class helloworld{
    public static void main(String[] args){
        User u = new User();
         System.out.println(u.no);
         System.out.println(u.name);
         System.out.println(u.addr);
         u.no = 110;
         u.name = "jack";
        u.addr = new Address();
    }
}

//测试类2
public class helloworld{
    public static void main(String[] args){
        User u = new User();
        Address a = new Address();
        u.addr = a;
        System.out.println(u.addr.city);
        a.city = "天津";
        System.out.println(u.addr.city);
    }
}

2.6 夫妻类

//丈夫类
public class Wife{
    String name;
    Husband h;//丈夫对象当中含妻子引用
}
//妻子类
public class Husband{
    String name;
    Wife w;//妻子对象当中还有丈夫引用
}
public class code{
    public static void main(String[] args){
        //创建一个丈夫对象
        Husband huang = new Husband();
        huang.name = "黄晓明";
        //创建一个妻子对象
        Wife baby = new Wife();
        baby.name = "baby";
        //结婚【通过丈夫找到妻子,也可以通过妻子找到丈夫】
        huang.w = baby;
        baby.h = huang;
        //得到黄晓明的妻子的名字
        System.out.println(huang.name + "妻子的名字是" + huang.w);
    }
}

2.7 JVM

2.7.1 内存区

当中变化最频繁的是栈内存,最先有数据的是方法去内存,垃圾回收器主要针对的是堆内存;

2.7.2 垃圾回收器【自动垃圾回收机制、GC机制】

什么时候考虑将某个java对象的内存回收呢?

1)当栈内存当中java对象称为垃圾数据的时候,会被垃圾回收器回收;

2)什么时候堆内存的java的对象会变成垃圾呢? -没有更多的引用指向它的时候;

-这个对象无法被访问,因为访问对象只能通过引用的方式访问;

2.8 空指针异常

public class code{
    public static void main(String[] args){
        Customer c = new Customer();
        System.out.println(c.id);
        c=null;
        //以下程序编译可以通过,因为符合语法,        //运行出现空指针异常
        //空引用访问“实例”相关的数据一定会出现空指针异常
        //java.lang.NullPointerException
        System.out.println(c.id);
    }
}
 

2.9 关联关系和继承关系

关联关系:A has a B【A对象中含有B对象的引用】;

继承关系:A is a B【关系更加紧密】

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值