栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java SE】java中的类和对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java SE】java中的类和对象

目录

认识面向对象

类的定义和使用

类的定义

类的实例化

this引用

变量名与形参名相同起冲突

this引用的特点

构造方法

总结一下this


认识面向对象

面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好

或许看这个晦涩难懂的概念的确很抽象那我就举几个例子。

比如:洗衣服

在我们以前洗衣服的时候都要经过这10步,我们需要自己经过拿盆->放水->将衣服放进水里->放洗衣粉->手搓->换水->放洗衣粉->手搓->拧干->晾衣服。这10步都是我们洗衣服的过程,虽然我们能把衣服的污渍全部洗净,但是很消耗我们的时间并且特别的麻烦。

而我们现在洗衣服的方式

 我们只需要将衣服放进洗衣机里,然后倒入充足的水,倒入洗衣粉,把衣服放进洗衣机,等待即可,我们从中可以发现,通过洗衣机洗衣服完全不需要我们自己动手自己做,只需要自己,衣服,洗衣粉,洗衣机这四个对象就可以完成某个任务。


通过上面两种方式我们可以得出结论,传统洗衣服的方式就是依靠自己取洗衣服,消耗时间成本过多,特别的麻烦,但是效率更高。

现代洗衣服的方式只经过几个对象各自完成自己相对应的任务即可。


再举一个例子:

比如我们学完变成之后一年年薪挣了很多很多钱,我们就可以给自己换一个mac电脑;

我自己去买:打开手机->打开淘宝/京东/网购软件->搜索mac电脑->查询价格->查询型号/内存/手机颜色->咨询服务人员->确认购买->付钱->下单->取快递->拿到mac进行工作。

让朋友帮买:给朋友打电话->跟朋友说我要买mac->朋友去买->到货之后给我。


上面的例子也是如果是我自己操作就会浪费很长的时间,但如果是让朋友帮买,只需要 我,朋友,mac电脑这几个对象就可以帮我买到电脑。这也就是面向对象编程。

面向对象与面向过程的本质的区别    更加细致的细节可以去看一下这篇博客。


类的定义和使用

既然是面向对象编程,那我们肯定要有对象(面向对象具体要实现这几步  定义对象,创建对象,适使用对象完成某些功能)。

第一步:怎么定义对象呢?这也就是我们第一个要讲的类。什么是类呢?

类的定义

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了

举一个例子:比如手机都会有这几个属性:颜色 ,型号 ,品牌 ,屏幕尺寸等等,手机的功能:打电话,发微信/信息,娱乐/购物/玩游戏等等功能。每个手机都会有这些属性和功能,出厂商也会根据这些属性来制造手机。所以这些由属性和方法组成的这些就像一个模板,我们就是根据这个模板来制造不同的手机(也就是对象) 在java中这个模板(这些属性和功能)就是类

那在java程序中怎么定义这个类呢?

类的定义格式

// 创建类
class ClassName{
    field; // 字段(属性) 或者 成员变量
    method; // 行为 或者 成员方法
}

1):class是java中的关键字用来定义一个类 。  2):Classname是类名这里要注意使用大驼峰(每个单词首字母要大写) 。  3):field是你定义的属性,也叫作成员变量。  4):method是对象能实现的功能也叫作成员方法。

我们来定义一个手机这个类:

class SmartPhone {
    public String brand;//手机的品牌
    public String model;//手机型号
    public int measurement;//手机尺寸
    public void telephone() {//打电话的功能
        System.out.println("我要打电话!");
    }
    public void weChat() {//发微信的功能
        System.out.println("我要发微信!");
    }
}

我们来剖析一下:

 再来举一个例子:定义一个学生类:

class Student {//定义一个学生类
    //成员变量<--->属性   定义在方法的外面  类的里面
    public String name;//姓名
    public int id;//学号
    public String sex;
    public int height;//身高
    public int weight;//体重
    //成员方法----->学生能够实现的功能
    public void eat() {//
        System.out.println("我要吃饭!");
    }
    public void sleep() {
        System.out.println("我要睡觉");
    }
    public void programming() {
        System.out.println("我爱programming,我爱java!");
    }
}

 我来总结一下需要注意的点:

1):一个文件只能有一个public修饰的类,并且文件名要与类名是相同的,我们定义的类不能加public。

2):我们如果想要修改文件名可以  这样修改文件名同时类名也被自动修改。

 3):成员变量一定是定义在类的里面,方法的外面。

4):定义的类名采取大驼峰。

5):类就相当于一个模板,也就是对象拥有的属性和功能。通过类可以创建多个对象。


类的实例化

前面说有类,类就像是一个模板,但是有了模板干什么用呢?那当然是创建对象了,通过这样的模板就可以创建很多的对象。就像是一张图纸就可以建设多个高楼大厦一样。

定义了一个类,就相当于在计算机中定义了一种新的类型(java中就是把c语言的结构体替换成类,java中的类不仅有c语言结构体的功能,而且还有结构体没有的功能,相当于更新),与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。

有了类我们怎么创建对象呢?

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
好我们接着上面手机的那个类来创建一个smartphone对象;

我们来画图理解一下(它在内存中是怎么存储的?)

 我们有了这个对象就可以访问这个对象的属性和方法,也就是可以给这个对象初始化属性,实现这个对象有的功能。



 刚才将了实例化对象我们来总结一下吧:

1):我们通过new关键字来创建一个对象(也叫作实例化对象),实例化对象的同时就会为对象在堆上开辟一块内存。我们通过对象的引用就可以访问到对象的属性和方法。

2):访问对象->对象的引用 . 成员变量/成员方法

3):如果不给属性/成员变量赋值的话,编译器就会自动初始化为对应的默认值。


this引用

 我们来通过一个例子来讲解this引用

变量名与形参名相同起冲突

以下我定义了一个show方法用来为手机属性初始化。

 

大家可以注意到我的形参变量名:

 如果我改成跟属性名一样呢?不是说形参名可以任意取么?

 这里答案就会出现问题,为什么是默认的值呢?我不是调用show初始化了么?

原因是我们不知道到底是谁给谁赋值,这就会造成错误。

我们加上this后


再举一个例子:

多个对象传参调用show函数

出现上述情况根部就不知道先给谁传参这就会导致冲突。


就上述两种情况我们该如何解决这个问题呢?

就是使用我们的this引用就可以很好地解决这个问题。 


 为什么使用this就可以呢?this是干什么的呢?

this代表当前对象的引用,也就是通过地址传参。

java编译器给每个“成员方法“增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

一般建议是习惯使用this,加上总不会出错    -————>  this.成员变量 -->记住this代表当前对象的引用。


this引用的特点

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

构造方法

对象是如何产生的?

对象的产生分为两步:1.为对象分配内存。2.调用合适的构造方法。

更深入的大致分为:

1.检测对象对应的类是否加载了,如果没有加载则加载
2.为对象分配内存空间
3.处理并发安全问题
比如: 多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

4. 初始化所分配的空间
即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值

我们这里先谈一谈现在我们知道的初始化有哪几种。

一种是在类里面就地初始化;例如:

 但是这里有一个缺点,难道所有的手机都是华为 这些型号么?当然不是,所以,一般不这样初始化,只有在特定的场景才可以使用这样的初始化。

另一种是在我们创建完对象时在初始化;

但是这样的初始化如果创建多次修改就会很麻烦。


最后我们就要讲一下最好用的那就是构造方法;

在回顾一下,我们一个对象生成大致为两个过程,一是为对象分配内存,二是调用合适的构造方法。

那构造方法到底是干什么的呢?

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。


构造方法其实就是在对象创建之前就已经初始化完成;也就相当于人刚出生父母就会起名字。


构造方法的要求:

1):构造方法没有返回类型,void也不行,它的名字要和类名相同。

2):一个类中至少要有一个构造方法,就算在程序中没有写构造方法,编译器会为我们自动生成一个不带有参数的构造方法(原因是一个对象生成有两步,一是为对象分配内存,而是调用合适的构造方法,所以类中肯定至少要有一个构造方法)。

3):自己写的构造方法可以不带参数可以带1,2,3多个参数。但是当你自己写构造方法的时候,编译器就不会生成构造方法,只会调用你写的构造方法。


在java程序中怎么创建一个构造方法呢?

不带有参数的构造方法


带有参数的构造方法


这里可以发现当我们写了带有参数的构造方法,它就不会调用编译器自动生成的构造方法


我们怎样在构造方法中调用构造方法呢?

答案是利用this

 


总结一下this 

this.data——>访问成员变量

this.func()——>访问成员方法

this()——>访问本类中其他构造方法

当然在使用this在构造方法中调用另外一个构造方法的时候,只能够调用一次并且要放在第一行;

比如举个反例

this调用构造方法时只能在这个构造方法调用一次

this调用构造方法时候只能在这个构造方法的第一行调用

并且this在调用构造方法的时候不能形成环


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号