Java语言-----类与对象的秘密

Posted tq02

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java语言-----类与对象的秘密相关的知识,希望对你有一定的参考价值。

目录

前言

一、类与对象的介绍

二、类的实例化

 三.类与对象的使用方法

 3.1对象的初始化

  3.2内存显示图

四.this的使用方法

总结


 😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主

 🌈理想目标:努力学习,向Java进发,拼搏一切,找到一份朝九晚五,有假期的工作,让自己的未来不会有遗憾。
 🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨

     本章讲解内容:Java类与对象的讲解

 今日份鸡汤:不要把明天当着你的底气。

前言

               已经开始类与对象的讲解了,正式步入了Java的道路了,在讲解前,我们都知道Java是面向对象的编程语言,那么什么是对象呢?还有类是什么呢?


一、类与对象的介绍

                类的关键字是class,在Java编程里,类的作用相当于机械师手中的构造图如果没有构造图,就无法打造武器,同样如果没有类,就无法实例化。

                对象就是打造人,通过对象将类实例化。

个人结论:工匠  使用    锤子     根据     说明书    打造出武器,                                                                                   对象           编译器                  类           实例化

  1. 类可以有很多对象,而对象却只有一个类。 
  2. 类有成员变量和成员方法。
  3. 类不占空间,只有实例化时,才开辟相应空间。      

二、类的实例化

        类相当于构造图,然而构造图上肯定写了需要的零件打造的方法,所以类就有着成员变量成员方法

       然后对象才知道如何打造(开辟空间)。

 类和对象的定义和实例化的格式

// 创建类   类名
class <class_name>
field;//成员属性
method;//成员方法

// 实例化对象
<class_name> <对象名> = new <class_name>();

class为定义类的关键字,ClassName为类的名字,中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法

格式已经出来了,现在我们敲一个代码出来看看:

class Person 
    int age;//成员属性 实例变量
    String name;
    String sex;
    //成员方法
    public void eat() 
    System.out.println("吃饭!");
    
    public void sleep() 
    System.out.println("睡觉!");
    


public class Main
public static void main(String[] args) 
    Person person = new Person();   //通过new实例化对象
    //产生对象 实例化对象
    Person person2 = new Person();
    Person person3 = new Person();

这就是创建类和对象的具体方法了。


 三.类与对象的使用方法

 3.1对象的初始化

       对象的初始化有两种方式。

       第一种:使用圆点成员运算符( .)  可以直接对指定对象实例化的成员变量进行赋值。

                 对象.属性:表示调用类之中的成员变量;
                对象.方法():表示调用类之中的成员方法。

       第二种:使用构造函数,使用函数可以对成员变量进行初始化。

                 类名(参数) 结构体 ;

代码示例图:

class Person 
    int age;//成员属性 实例变量
    String name;
    String sex;
    //构造函数
    Person() 
    
    Person(String names)
    name=names;
    
    //成员方法
    public void eat() 
    System.out.println("吃饭!");
    
    public void sleep() 
    System.out.println("睡觉!");
    


public class Main
public static void main(String[] args) 
    Person person = new Person();   //通过new实例化对象
    //初始化person成员变量name,调用成员方法eat()
    person.name="李四"; //操作属性内容
    person.eat():   //调用成员方法
    //构造方法初始化
    Person person2 = new Person("张三");
    Person person3 = new Person();
  

  3.2内存显示图

         类的构造图,但一旦实例化,就开辟出了内存,存放着对应的变量和方法。

代码内存显示图:

在main函数里创建了三个对象,person、person1、person2。每个对象都进行了实例化,在堆空间创建了内存。如上图,相当于每一个对象都有属于它的空间

四.this的使用方法

        this是什么?this是关键字,代表着当前对象的引用。当参数名和成员变量相同时,使用this来引用,则代表的是成员变量。

结论:从图中我们可以分析到 this不但可以引用成员变量,也可以使用构造函数。所以this便是当前对象

注:只允许在当前类使用,构造方法中使用,需要放在第一行。


总结

  1.  类相当于蓝图,由对象根据类来将其实例化。
  2. public修饰的类必须与文件名相同
  3. this相当于对象名,作用和对象名一样,可以引用成员变量、构造函数、成员函数。但引用构造函数需要放在第一行。
  4. 类不占空间,但是对象实例化之后需要开辟空间。

     在类与对象之后,还会有封装、继承、抽象、多态和接口相关的知识,在类与对象的基础上不断的延长。

Java类与对象

类与对象

1,面向对象编程简介

  Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展。面向过程编程(C语言)、函数式编程(Scala)、面向对象编程(JavaC++PythonRuby)。

  所谓的面向过程指的是面对一个问题的解决方案,更多的情况下是不会做出重用的设计思考的,而面向对象的主要设计形式为模块化设计,并且可以进行重用配置。在整个的面向对象的设计里面更多情况下考虑的是标准,在使用的时候根据标准进行拼装,而对于面向对象设计有三个主要的特征:

  ·封装性:内部的操作对外部而言不可见,当内部的操作都不可直接使用的时候才是安全的;

  ·继承性:在已有结构的基础上继续进行功能的扩充;

  ·多态性:是在继承性的基础上扩充而来的概念,指的是类型的转换处理。

在进行面向对象程序的开发之中一般还有三个步骤:

  ·OOA:面向对象分析;

  ·OOD:面向对象设计;

  ·OOP:面向对象编程;

 

2,类与对象简介

类是对一类事物的共性的抽象概念,而对象描述的是一个具体的产物。例如:现在将我和另外一个人进行比较时可以立刻区分出我还有别人。

我和其他的人都一样,都是一个个具体可以使用的个体产物,但是这些个体都有一些共性的标志:人。但是人和人有各不相同,所谓人和人之间的不同依靠的是我们各自的属性,每一个属性的集合就构成了一个对象,但是所有鄂属性都应该是群体的定义,而群体的定义就形成了一个类。

技术图片

类是一个模板,而对象才是类可以使用的实例,先有类再有对象。

在类之中一般都会有两个组成:

·成员属性(Filed):有些时候为了简化称其为属性;

|-一个人的年龄、姓名都是不同的,所以这些对于整体来讲就称为属性;

·操作方法(Method):定义对象具有的处理行为;

|-这个人可以唱歌、跳舞、游泳、运动;

 

3,类与对象的定义及使用

Java之中类是一个独立的结构体,所以需要使用class来进行定义,而在类之中主要由属性和方法所组成,那么属性就是一个个具体的变量,方法就是可以重复执行的代码。

产生对象的两种方式:

①声明并且实例化:类名称 对象名称 = new 类名称();

②分步骤完成:

|-声明对象:类对象 对象名称=null;

|-实例化对象:对象名称=new 类名称();

 技术图片

 

4,对象内存分析

Java之中类属于引用数据类型,引用数据类型最大的困难之处在于要进行内存的管理,同时进行操作的时候也会发生有内存关系的变化。

如果要进行内存的分析,那么首先给出两块最为常见的内存空间:

·堆内存:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new 完成的;

·栈内存:保存的是一块堆内存的地址,即:通过地址找到堆内存,而后找到对象内容;

栈溢出StackOverFlow

技术图片

技术图片

技术图片

需要特别引起注意的是,所有的对象在调用类中的属性或方法的时候必须要实例化完成后才可以执行。

·范例:错误的代码示范

 1 class Person
 2     String name;
 3     int age;
 4     public void tell()
 5         System.out.println("姓名:"+this.name+",年龄:"+this.age);
 6     
 7 
 8 public class Main 
 9     public static void main(String[] args) 
10         Person person = null;//声明对象
11 //        person=new Person();//实例化对象
12         person.name="万雨";
13         person.age=25;
14         person.tell();
15     
16 
1 Exception in thread "main" java.lang.NullPointerException
2 
3 at Main.main(Main.java:12)

NullPointerException空指向异常,没有在堆内存开辟后所产生的问题,并且只有引用数据存在此类问题。整个代码之中只是声明了对象,但是并没有为对象进行实例化,所以此时无法调用。

 

5,对象引用分析

类本身属于引用数据类型,既然是引用数据类型,那么就牵扯到内存的引用传递,所谓的引用传递的本质:同一块的堆内存空间可以被不同的栈内存引用,也可以更换指向。

技术图片 

这个时候引用传递是直接在主方法之中定义的,也可以通过方法实现引用传递处理。

引用传递可以发生在方法上,这个时候一定要观察方法的类型,同时也要观察方法的执行过程。

 

6,引用与垃圾产生分析

经过一系列的分析之后已经确定,所有的引用传递的本质就是一场堆内存的调戏游戏。但是对于引用传递不当,那么也会造成垃圾的产生,那么本次将针对垃圾产生的原因进行简单分析。

·范例:垃圾的产生

class Person
    String name;
    int age;
    public void tell()
        System.out.println("姓名:"+this.name+",年龄:"+this.age);
    

public class Main
    public static void main(String[] args)
        Person person1 = new Person();//声明对象
        Person person2 = new Person();//声明对象
        person1.name="张三";
        person2.name="李四";
        person1.age=18;
        person2.age=25;
        person1=person2;//引用传递

    

此时已经明确发生了引用传递,并且也成功的完成了引用传递的处理操作,但是下面我们进行内存分析。

一个栈内存只能保存一个堆内存的地址数据,如果发生更改,则之前的地址数据将从此栈内存中彻底消失。

 技术图片

  所谓的垃圾空间就是没有任何栈内存所指向的堆内存空间,所有的垃圾空间将被GCGarbage Collector、垃圾收集器)不定期进行回收,并且释放无用空间,但是如果垃圾过多,一定将影响到GC的处理性能,从而降低整体的程序性能,那么在实际的开发之中垃圾的产生应该越少越好。

 

 

以上是关于Java语言-----类与对象的秘密的主要内容,如果未能解决你的问题,请参考以下文章

java类与对象中的方法

Java基础 06 类与对象封装构造方法

java基础知识学习笔记

菜鸟笔记 -- Chapter 6 面向对象

JavaSE之类与对象

类与对象的学习之路