首页 > 其他分享 >类和对象

类和对象

时间:2024-07-13 23:29:50浏览次数:4  
标签:对象 void Object 线程 public native

类和对象

  • 直接通过匿名对象调用方法
// 匿名对象意味着没有引用变量,它只能在创建的时候被使用一次
new Person().initialize("沉默王二", 18, 1);

Object类

对象比较

public native int hashCode()

public native int hashCode();
  • native方法,用于返回对象的哈希码
  • 相等的对象必须具有相等的哈希码。如果重写了 equals 方法,就应该重写 hashCode 方法

public boolean equals(Object obj)

public boolean equals(Object obj) {
    return (this == obj);
}
  • 比较 2 个对象的内存地址是否相等
  • 如果比较的是两个对象的值是否相等,就要重写该方法
class Person {
    private String name;
    private Integer age;

    // 省略get set

   @Override
   public boolean equals(Object o) {
      // 哈希码一致返回true
      if (this == o) return true;
      // o为空或者不是同一个类返回false
      if (o == null || getClass() != o.getClass()) return false;
      // 强制类型转换后,判断各个属性的值是否一致
      Person person = (Person) o;
      return Objects.equals(name, person.name) && Objects.equals(age, person.age);
   }

   // 重写了equals方法,就应该重写hashCode方法
   @Override
   public int hashCode() {
      return Objects.hash(name, age);
   }
}

对象拷贝

protected native Object clone() throws CloneNotSupportedException;

protected native Object clone() throws CloneNotSupportedException;
  • naitive 方法,返回此对象的一个副本。默认实现只做浅拷贝,且类必须实现 Cloneable 接口。

对象转字符串

public String toString()

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • 默认实现返回类名@哈希码的十六进制表示,通常重写返回有含义的字符串。
  • 数组也是一个对象

多线程调度

public final void wait() throws InterruptedException

  • 调用该方法会导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法。

public final native void notify()

  • 唤醒在此对象监视器上等待的单个线程。如果有多个线程等待,选择一个线程被唤醒。

public final native void notifyAll()

  • 唤醒在此对象监视器上等待的所有线程。

public final native void wait(long timeout) throws InterruptedException

  • 等待 timeout 毫秒,如果在 timeout 毫秒内没有被唤醒,会自动唤醒。

public final void wait(long timeout, int nanos) throws InterruptedException

  • 更加精确了,等待 timeout 毫秒和 nanos 纳秒,如果在 timeout 毫秒和 nanos 纳秒内没有被唤醒,会自动唤醒。
public static void main(String[] args) {
    // 每个对象都可以调用Object的wait/notify方法来实现等待/通知机制
    Object o = new Object();
    new Thread(() -> {
        synchronized (o) {
            try {
                System.out.println("线程1开始等待");
                o.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程1被唤醒");
        }
    }).start();
    new Thread(() -> {
        synchronized (o) {
            System.out.println("线程2唤醒线程1开始");
            o.notify();
            System.out.println("线程2唤醒线程1结束");
        }
    }).start();
}

反射

public static void main(String[] args) {
    Person person = new Person();
    Class<? extends Person> aClass = person.getClass();
    // test.Object.Person
    System.out.println(aClass.getName());
}

垃圾回收

protected void finalize() throws Throwable

  • 当垃圾回收器决定回收对象占用的内存时调用此方法。用于清理资源,但 Java 不推荐使用,因为它不可预测且容易导致问题,Java 9 开始已被弃用。

标签:对象,void,Object,线程,public,native
From: https://www.cnblogs.com/sprinining/p/18300991

相关文章

  • 类和对象(中)
    拷贝构造函数概念        如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外的参数都有默认值,则此构造函数也叫做拷⻉构造函数,也就是说拷⻉构造是⼀个特殊的构造函数。特点1.拷⻉构造函数是构造函数的⼀个重载。2.拷⻉构造函数的参数第一个必须是类类......
  • IO输入输出流例子:Java对象输出json文本:
    读取文件:原始字节输入流(低级):publicclassCharCacheIOReader{publicstaticvoidmain(String[]args){try(//原始字节输入流(低级)Readerfr=newFileReader("src\\OutputStream.txt");//创建一个字......
  • C++类和对象 前篇
    C++类和对象基础部分​众所周知,C语言是一门面向过程的语言,面向过程简单来说就是直接使用各种函数和数据来解决一件事。而面向对象是谁来使用函数和数据去解决一件事。​C++是一门既可以面向对象也可以面向过程的语言,它能够兼容C语言,并且对C语言进行了许多优化升级,其中......
  • 面向对象-接口和多态
     1.接口的特性:接口里的数据成员必须初始化,且数据成员均为常量;接口里的方法必须全部声明为abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”。2.接口定义的语法:interface接口名称//定义抽象类{final数据类型成员名称=常量;/......
  • C++利用类和对象封装立方体面积和体积
    C++利用类和对象封装立方体面积和体积1、说明2、代码3、总结1、说明C++利用类和对象进行封装立方体的面积和体积,对学过的知识进行总结,本代码并非原创。2、代码#include<iostream>#include<time.h>#include<string.h>#include<ctime>usingnamespacestd;//立......
  • 万能可调用对象绑定器CPBind
    背景作为一个C++程序员,经常喜欢写一些代码小工具,有一天写代码用到了std::bind,需要和std::function配合使用,并且需要传递的参数类型也已经固定,所以我就想能不能写一个类让它可以接受任意类型的可调用对象(C函数,成员函数,静态函数,lambda表达式,重载operator()的类对象等),所以写出......
  • 类和对象(中)|
    1.类的6个默认成员函数2.构造函数3.析构函数4.拷贝构造函数5.赋值运算符重载6.const成员函数7.取地址及const取地址操作符重载1.类的6个默认成员函数空类里面并不是什么成员都没有,编译器会自动生成6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员......
  • Java中的类与对象详解
    Java中的类与对象详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,类与对象是两个最基本的概念。类是对象的模板,对象是类的实例。理解和掌握类与对象的概念是学习Java的基础。本文将详细介绍Java中的类与对象,包括类的定义、对象的创建、构......
  • 全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则
    全网最适合入门的面向对象编程教程:16类和对象的Python实现-多态、方法重写与开闭原则摘要:本文主要介绍了Python中创建自定义类时子类如何实现对父类方法的重写、方法重写的定义和多态的基本概念,并对开闭原则进行介绍。原文链接:FreakStudio的博客往期推荐:学嵌入式的你,......
  • 关于面向对象的方法并行执行的问题
    LabVIEW的从同一个类实例化的多个对象如何执行各自的方法呢?这几天跟同事讨论到LabVIEW的面向对象编程中,如果我设计的一个类有一个方法比较耗时,那么当我实例化多个对象时,那么这个耗时的方法是怎么执行的呢?是各自并行执行还是,必须等某一个对象的方法调用完,接下来调用第二个对象的该......