美文网首页Java工程师知识树
Java基础-面向对象-类和对象

Java基础-面向对象-类和对象

作者: HughJin | 来源:发表于2020-12-21 09:20 被阅读0次

    Java工程师知识树 / Java基础


    类(class)是Java 语言的最小编程单位,也是设计和实现Java 程序的基础。

    类的概念

    类是一组事物共有特征和功能的描述。

    解释:类是对于一组事物的总体描述,是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。

    总结:类是抽象的,对象是具体的,实实在在的!

    //类的定义:
    [修饰符] class  类名{
        1~n个构造方法;
        0~n个字段;
        0~n个方法
    }
    

    定义类,其实就是定义类里面的对象

    对象

    万物皆对象

    对象包含:通过类来描述对象)

    • 状态;(成员变量)
    • 功能、行为;(方法)

    使用new方式创建对象的过程

    当执行Point myPoint = new Point(12,34)这条代码时会顺序执行如下的几步.

    第一、执行Point myPoint。在栈当中生成一个引用型变量的空间 mypoint,注意这时并没有生成任何对象.
    第二、执行new Point(12,34)

    首先在堆当中为Point 型的无名对象开辟空间;
    之后将对象当中的成员变量进行初始化;
    最后调用Point 类的构造函数.

    第三、将这个创建好的对象的引用赋给 myPoint.

    创建对象的方式

    我们总是讨论没有对象就去 new 一个对象,创建对象的方式在我这里变成了根深蒂固的 new 方式创建,但是其实创建对象的方式还是有很多种的,不单单有 new 方式创建对象,还有使用反射机制创建对象,使用 clone 方法去创建对象,通过序列化和反序列化的方式去创建对象。这里就总结一下创建对象的几种方式,来好好学习一下 java 创建对象的方式。

    使用 new 关键字

    这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的)。比如:Student student = new Student();

    使用 Class 类的 newInstance 方法

    这个 newInstance 方法调用无参的构造器创建对象,如:
    Student student2 = (Student)Class.forName("根路径.Student").newInstance();
    或者:
    Student stu = Student.class.newInstance();

    使用 Constructor 类的 newInstance 方法

    本方法和 Class 类的 newInstance 方法很像,java.lang.relect.Constructor类里也有一个 newInstance 方法可以创建对象。我们可以通过这个 newInstance 方法调用有参数的和私有的构造函数。如:
    Constructor<Student> constructor = Student.class.getInstance();
    Student stu = constructor.newInstance();

    这两种 newInstance 的方法就是大家所说的反射,事实上 Class 的 newInstance 方法内部调用 Constructor 的 newInstance 方法。这也是众多框架 Spring、Hibernate、Struts 等使用后者的原因。

    使用 clone 方法

    论何时我们调用一个对象的 clone 方法,JVM 就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用 clone 方法创建对象并不会调用任何构造函数。要使用 clone 方法,我们必须先实现 Cloneable 接口并实现其定义的 clone 方法。如:Student stu2 = <Student>stu.clone(); 这也是原型模式的应用。

    使用反序列化

    当我们序列化和反序列化一个对象,JVM 会给我们创建一个单独的对象,在反序列化时,JVM 创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现 Serializable 接口。如:
    ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj"));
    Student stu3 = (Student)in.readObject();

    相关文章

      网友评论

        本文标题:Java基础-面向对象-类和对象

        本文链接:https://www.haomeiwen.com/subject/wpfqnktx.html