java类与对象 学习笔记

类与对象

面向对象(Object Oriented)

一、面向对象

三大特性:

  1. 封装性:对象的成员属性和行为看做一个不可分割的整体,一些不想让外界看到的方法也隐藏起来
  2. 继承性:java是类的单继承,接口的多继承,是从一个基础的类上派生出反应一些特殊性的类,如几何类下面可以包括圆类,正方体类等
  3. 多态性:多态是指程序中允许出现重名现象。
    1. 方法重载:根据函数参数的不同,允许同名函数完成不同的工作
    2. 对象多态:子类对象可以和父类对象相互转换,根据其使用的子类不同完成的功能也不同,比如几何类实例对象,new Circle()和new Cube()是不同的,但是都可以用Gemometric定义

二、类与对象

一个类完成定义后,描述的只是一个广泛的概念,其具体操作必须通过对象来完成,格式如下:

类名称 对象名称 = new 类名称()

或者进行分步定义:

  1. 类名称 对象名称 = null
  2. 对象名称 = new 类名称()

然后采取以下方法进行类结构的操作

  1. 对象.成员属性:表示调用类中的成员属性,可以为其赋值或者获取其保存内容
  2. 对象.方法():表示调用;类中的方法
public class ObjectDemo {
   
    public static void main(String[] args) {
   
        Person person = new Person("张三", 15);
        System.out.println(person.tell());
    }
}
class Person{
   
    private String name;
    private int age;
    public Person(String name, int age){
   
        this.name = name;
        this.age = age;
    }
    public String tell(){
   
        return "姓名: "+this.name+"、 年龄: "+this.age;
    }
}

1. 对象内存分析

类属于引用数据类型,在使用过程中都要通过关键字new开辟新的内存空间,才能实现成员属性的信息保存

  1. 【heap】堆内存:保存的是对象的具体信息(成员属性),在程序之中内存空间的开辟是通过关键字new进行的
  2. 【stack】栈内存:保存的是一块堆内存的地址,可以通过地址找到内存,然后找到对象内容。

类中的成员属性都是每个对象私有的,而类中的方法是所有对象共有的,方法的信息会存储在“全局方法区”这样的公共内存中

NullPointerException表示的是没有正确实例化对象,也就是有地址,但是地址所指向的内存为空

public class ObjectDemo {
   
    public static void main(String[] args) {
   
        Person person1 = new Person("张三", 15);
        Person person2 = person1; // 引用传递,此时person2的地址指向person1的地址,然后指向person1的内存
        System.out.println(person1.tell());
        System.out.println(person2.tell());
    }
}
class Person{
   
    private String name;
    private int age;
    public Person(String name, int age){
   
        this.name = name;
        this.age = age;
    }
    public String tell(){
   
        return "姓名: "+this.name+"、 年龄: "+this.age;
    }
}

当使用引用传递时,要注意栈内存只能保存一个堆内存的信息,当发生指向改变时需要断开原有连接,进行新的连接,此时原有指向的堆内存就没有了入口,成为垃圾,需要GC(Garbage Collection)垃圾回收器不定期的进行回收释放

三、成员属性封装

使用private进行属性的封装,只能够在该类中进行调用,外部无法使用,此时应该提供getter,setter方法来获取和修改private属性。

四、构造方法与匿名对象

构造方法在实例化对象时默认调用new,完成对象属性的初始化操作

  1. 构造方法的名称必须与类名保持一致
  2. 构造方法没有返回值类型声明

实例化类时会默认生成一个无返回值无参数的构造方法,如果类中明确定义了一个构造方法,则不会自动生成无参无返回值的构造方法,也就是一个类中至少存在一个构造方法

构造方法也可进行重载,而且只需考虑参数类型及个数即可

public class ObjectDemo {
   
    public static void main(String[] args) {
   
        Person person1 = new Person("张三"); // 使用单参数构造方法,年龄为默认值0
        System.out.println(person1.tell());
    }
}
class Person{
   
    private String name;
    private int age;
    public Person(String name, int age){
   
        this.name = name;
        this.age = age;
    }
    public Person(String name){
   
        this.name = name;
    }
    public String tell(){
   
        return "姓名: "+this.name+"、 年龄: "+this.age;
    }
}

匿名对象只能在创建的时候使用一次,由于没有入口,以后就无法调用

public class ObjectDemo {
   
    public static voi
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值