JavaSE的类和对象你真的了解吗

目录
  • 1.基本概念
    • 1.1面向对象
    • 1.2类和对象
  • 2.类的定义及使用
    • 2.1定义
    • 2.2类的实例化
  • 3.this引用
    • 3.1访问成员变量
    • 3.2访问成员方法
    • 3.3this引用的特性
  • 4.构造方法
    • 4.1构造方法的特点
    • 4.2this在构造方法中使用
  • 总结

1.基本概念

首先我们需要弄清楚几个概念:面向对象是什么、类是什么、对象又是什么?还是逐个来说

1.1面向对象

我们常说Java是面向对象的语言,C语言是面向过程的语言,那面向对象是什么,它和面向过程的区别在哪?

面向对象是解决问题的一种思想,其核心是依靠对象之间的交互来解决事情

至于面向对象和面向过程的区别,假设现在有一道数学题:

面向过程:你自己进行手算,你需要关注套用什么公式,如何化简、哪些条件组合可以推出什么结论等,中间有一个环节出错都不行

面向对象:你把问题给计算机,让计算机解决,我们关注的只是人和计算机这两个对象如何交互

这么看面向对象好像比面向过程更高级,但其实二者没有好与坏之分,它们都有自己专门的应用场景,就比如数学考试的时候题目你就只能自己写( ̄▽ ̄)

1.2类和对象

  • 类:对一个实体的描述
  • 对象:类的实例化

假设你要设计某个东西,类就是你所画的图纸,对象则是你通过图纸造出来的实物;一个类可以产生多个对象

2.类的定义及使用

2.1定义

在定义类的时候需要使用一个关键字:class

具体语法如下:

class ClassName {
    field;
    method;
}
  • ClassName:类名
  • field:成员变量
  • method:成员方法

我们现在定义一个类Book,里面成员变量包括书名、作者和价格,成员方法就是打印所有成员变量

文章后面的概念都会围绕这个类来进行讲解

2.2类的实例化

在main方法中实例化一个对象用到的关键字:new

代码如下:

Book book1 = new Book();

之后便可以使用“.”来访问类中的成员变量和成员方法,如下:

之前我们说过Java中的变量都要初始化,类里面的成员变量也不例外,如果成员变量未初始化,那么默认是对应的数据类型的0值

整型变量是0,浮点数是0.0,布尔类型为false,引用类型为null,char为'\u0000'

3.this引用

3.1访问成员变量

我们现在往类里面再增加一个方法setBook,用这个方法来对成员变量进行初始化

public void setBook(String name,String author,int price) {
        name=name;
        author=author;
        price=price;
    }

我们再来看一下结果:

为什么全部都是0值?

其原因在于方法的参数名和成员变量名相等,形参因为数局部变量,所以程序认为方法里面的name等变量全部都是形参

我们只需要将等号左边的变量加上this就可以解决这个问题

this代表的是当前对象的引用(谁调用了this,谁就是当前对象)

上图中book1调用的setBook方法,所以 book1是当前对象,方法中的this.name等变量就相当于告诉程序这个不是方法的形参,而是对象book1的成员变量

3.2访问成员方法

这个比较好理解,就是在方法里面引用类中的其它方法,但注意一点:引用不能成环

假设setBook里面引用了show方法,那么show方法里面就不能再引用setBook,否则就乱套了

还有一点需要补充:

上面提到过一个类可以产生多个对象,那么多个对象调用同一个方法,程序如何分辨是哪个对象调用的?

依旧是this引用

类中的方法起始都有一个隐式的this参数,通过this知道是哪个对象调用的方法,也就是说setBook方法其实是有4个参数,如下:

public void setBook(Book this,String name,String author,int price) {
        this.name=name;
        this.author=author;
        this.price=price;
    }

除了访问成员方法外,this还可以调用本类其它构造方法,这一点在构造方法中再介绍

3.3this引用的特性

1.只能在成员方法中使用

2.是成员方法的第一个隐藏的参数

3.在成员方法中只能引用当前对象(在对象Book1中使用this就只能引用Book1,不能引用对象Book2)

4.为对应类的类型引用,即哪个对象调用就是哪个对象的引用类型

4.构造方法

构造方法也是成员方法,但它比较特殊,对象的初始化除了在main方法中使用“.”一个一个初始化外还可以使用构造方法

在实例化一个对象的时候一定会经过两个步骤:

  • 分配内存
  • 调用合适的构造方法

如果用户没有写构造方法,编译器会默认提供一个不带参数的构造方法,写了就调用用户自己写的构造方法

4.1构造方法的特点

  • 方法名要和类名相同
  • 没有返回值,即使是写void也不行
  • 在整个对象的声明周期内只能调用一次
  • 可以重载

我们写一个构造方法如下:

 public Book(String name, String author, int price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

那么初始化对象如下:

4.2this在构造方法中使用

上面提到构造方法可以重载,那么我们再写一个没有参数的构造方法

 public Book() {

    }

this在构造方法中可以调用其它的构造方法,比如我在没有参数的构造方法中调用上面的有三个参数的构造方法

注意:

  • this同样不能成环
  • this必须放在构造方法的第一行

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 深入浅出分析Java 类和对象

    目录 一.什么是类 二.Java的类和C语言的结构体异同 三.类和类的实例化 类的声明 实例化的对象,成员遵循默认值规则 类的实例化 静态属性(静态成员变量) 四.构造方法 创建构造方法 this 一.什么是类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户自定义的引用数据类型,也称类类型.每个类包含数据说明和一组操作数据或传递消息的函数,类的实例称为对象 类的实质是一种引用数据类型,类似于 byte,shor

  • Java十分钟理清面向对象与类的核心

    什么是对象? 一切客观存在的事物都是对象 对象的组成 属性.行为 类是什么? 类是对大量对象共性的抽象 类是客观事物在人脑中的主观反映 类是创建对象的模板 类的组成 属性.行为 简单的说,一个类就是把公有的特征写在一起,然后由这个类创建的对象,都会都这个属性. 例如人这个类 属性会吃饭,会说话.我们就是对象,我们属于人这个类,因此我们也会吃饭说话. Java中类的定义 语法: public class Student{ //在这里面写成员属性.成员方法 } //Student就是这个类的名字,这

  • 浅谈javaSE 面向对象(Object类toString)

    每一个对象,都有一个在内存中的地址哈希值,这个哈希值是十六进制的 调用Object对象的hashCode()方法,返回这个对象的哈希值 调用Integer.toHexString()方法,转换十六进制 调用Object对象的toString()方法,得到:类名@哈希值 通常我们会复写toString()方法,因为默认的没有太大意义 实现原理是类的反射 当我们创建一个对象,会在硬盘上生成xxx.class的文件,jdk定义了Class类来描述这些class文件 调用Object对象的getClas

  • Java 中的类和对象详情

    目录 1.类的定义 2.类中变量的类型 3.构造方法 4.重载方法 5.继承 5.1 重写方法 6.创建对象 7.访问实例变量和方法 8.比较对象 8.1 使用 == 比较对象 8.2 使用 equals() 比较对象 类可以看成是创建Java对象的模板 1.类的定义 public class Dog { String name; int age; void eat() { } void sleep() { } } 2.类中变量的类型 局部变量:在方法或语句块中定义的变量被称为局部变量.变量声明

  • Java 深入浅出解析面向对象之抽象类和接口

    目录 抽象类 声明抽象类 声明抽象方法 案例 使用规则 接口 声明接口 案例 接口特性 抽象类和接口的区别 抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类. java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法. 声明抽象类 声明抽象类很简单,加个abstract关节字就行. public abstract class AA { } 声明抽象方法 在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说

  • JavaSE的类和对象你真的了解吗

    目录 1.基本概念 1.1面向对象 1.2类和对象 2.类的定义及使用 2.1定义 2.2类的实例化 3.this引用 3.1访问成员变量 3.2访问成员方法 3.3this引用的特性 4.构造方法 4.1构造方法的特点 4.2this在构造方法中使用 总结 1.基本概念 首先我们需要弄清楚几个概念:面向对象是什么.类是什么.对象又是什么?还是逐个来说 1.1面向对象 我们常说Java是面向对象的语言,C语言是面向过程的语言,那面向对象是什么,它和面向过程的区别在哪? 面向对象是解决问题的一种思

  • Java String 对象(你真的了解了吗)

    String 对象的实现 String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一下String对象的优化过程. 1. 在 Java6 以及之前的版本中 String对象是对 char 数组进行了封装实现的对象,主要有四个成员变量: char 数组.偏移量 offset.字符数量 count.哈希值 hash. String对象是通过 offset 和 count 两个属性来定位

  • C++深入刨析类与对象的使用

    目录 this指针 this指针存放在哪 nullptr与类 类的默认成员函数 构造函数 意义 析构函数 拷贝构造 运算符重载 this指针 现在给出一段代码,实现一个普通的日期 date 的打印: class date { public: void print() { cout << year<<' ' << month <<' '<< day << endl; } void init(int y, int m, int d) {

  • Python 类和对象详细介绍

    目录 对象 = 属性 + 方法 self是什么 公有和私有 继承 调用未绑定的父类方法 使用super函数 多重继承 组合 构造和析构 _ _init_ _(self[, …])构造方法 _ _new_ _(cls[, …])方法 _ _del_ _(self)析构方法 什么是绑定 对象 = 属性 + 方法 我们前面其实已经接触过封装的概念,把乱七八糟的数据扔进列表里面,这是一种封装,是数据层面的封装:把常用的代码段打包成一个函数,这也是一种封装,是语句层面的封装:现在我们要学习的对象,也是一种

  • Python面向对象编程中的类和对象学习教程

    Python中一切都是对象.类提供了创建新类型对象的机制.这篇教程中,我们不谈类和面向对象的基本知识,而专注在更好地理解Python面向对象编程上.假设我们使用新风格的python类,它们继承自object父类. 定义类 class 语句可以定义一系列的属性.变量.方法,他们被该类的实例对象所共享.下面给出一个简单类定义: class Account(object): num_accounts = 0 def __init__(self, name, balance): self.name =

  • 关于JavaScript定义类和对象的几种方式

    可以看看这个例子: 复制代码 代码如下: var a = 'global'; (function () { alert(a); var a = 'local'; })(); 大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的. 其实很简单,看一看JavaScript运行机制就会明白.我们可以把这种现象看做"预声明".但是如果稍微深究一下,会明白得更透彻. 这里其实涉及到对象属性

  • JavaScript定义类和对象的方法

    本文实例讲述了JavaScript定义类和对象的方法.分享给大家供大家参考.具体方法如下: 在JS中,类和对象有多种不同的写法,因为本人对JS也不怎么熟,所以就本人的理解来写,如果哪位朋友发现有不对,请告之,共同学习. JS定义一个类有两种定法(我只知道这两种): 1. 定义函数的方式: 定义: 复制代码 代码如下: function classA(a) {      this.aaa=a;  //添加一个属性      this.methodA=function(ppp)  //添加一个方法

  • javaScript中定义类或对象的五种方式总结

    第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Object; oTempCar.color = sColor; oTempCar.showColor = function (){ alert(this.color); }; return oTempCar; } var oCar1 = createCar(); var oCar2 = createCa

  • Javascript学习笔记5 类和对象

    面向对象语言三大特点:继承,多态,封装,这三点虽然Javascript没有提供天然的语法实现,但是我们都可以通过prototype等技巧来实现,因此这种说法似乎不过分. 在Javascript中,构造对象有三种方式: 1. 首先,我们要明确一个概念,Javascript是一种弱类型的语言,一方面体现在Javascript的变量,返回类型都是没有强类型约束的,另一方面,Javascript可以为对象任意添加属性和方法.根据这个,我们可以写出这样的代码: 复制代码 代码如下: <script typ

  • Javascript创建类和对象详解

    现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = new Object(); person.name="Amy"; person.sex="Woman"; person.show=function(){ document.write("name is: "+this.name+" ; se

随机推荐