热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

类和对象(Java)(1)

文章目录一、关于面向对象1.概念2.面向对象与面向过程二、类定义和使用1.类的定义格式2.练习三、类的实例化1.什么是实例化2.类和对象的说明四、this引用1.为什么要有this

文章目录

  • 一、关于面向对象
    • 1.概念
    • 2.面向对象与面向过程
  • 二、类定义和使用
    • 1.类的定义格式
    • 2.练习
  • 三、类的实例化
    • 1.什么是实例化
    • 2.类和对象的说明
  • 四、this引用
    • 1.为什么要有this引用
    • 2.什么是this引用
    • 3.this引用的特性
    • 4.this引用有没有可能为空




一、关于面向对象

1.概念

Java是一门纯面向对象的语言,在面向对象世界里,一切皆为对象。面向对象时解决问题的一种思想,主要依靠对象之间的交互完成一件事情。

2.面向对象与面向过程

以传统和现代洗衣服的差别相比来举例:
传统洗衣:
注重过程,少了一个环节可能都不行,而且不同衣服洗的方式可能都不同,就会比较麻烦,按照这种方法来写代码,将来扩展或维护起来会比较麻烦。
现代洗衣服:
总共有四个对象:人、衣服、洗衣粉、洗衣机。
整个过程主要是人、衣服、洗衣粉、洗衣机四个对象之间交互完成的,人不需要关心洗衣机是如何具体洗衣服,如何甩干的。
以面向对象方式来进行处理,就不关注洗衣服的过程,只需要将衣服放进洗衣机,导入洗衣粉,启动开关即可,是通过对象之间的交互来完成的。

二、类定义和使用

类是用来对一个实体(对象)进行描述的。如果想要让计算机认识洗衣机,就需要将纸上的描述(头脑中的想法)采用某种计算机编程语言来给计算机进行描述。

1.类的定义格式

在Java中定义类时需要用到class关键字,具体如下:

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

class为定义类的关键字,ClassName为类的名字,{}为类的主体。
类中包含的内容成为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,成为类的成员方法。
示例:

class WashMachine {public String brand;//品牌public String type;//型号public String color;//颜色public double weight;//重量public double length;//长public double width;//宽public double height;//高public void WashClothes(){ //洗衣服System.out.println("洗衣功能");}public void dryClothes(){ //脱水System.out.println("脱水功能");}public void SetTime(){ //定时System.out.println("定时功能");}
}

采用Java将洗衣机类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM基础上计算机就可以识别了。
注意事项:
1.类名注意采用大驼峰定义(这点最开始学习Java就已经说明)
2.成员前写法统一为public
3.此处写的方法不带static关键字

2.练习

1.定义一个狗类:

首先进行分析,狗的名字、毛发颜色是用来描述狗的,因此是这个类的成员变量,狗具有汪汪叫和摇尾巴的功能,所以类中包含这两个成员方法。
代码如下(示例):

class PetDog {public String name;//名字public String color;//颜色//狗的属性public void barks(){System.out.println(name+": 汪汪汪~~~");}//狗的行为public void wag(){System.out.println(name+": 摇尾巴~~~");}
}

2.定义一个学生类:
属性:姓名、性别、年龄、成绩
方法:来上课、写作业、要考试

public class Student {public String name;public String gender;public short age;public double score;public void DoClass();public void DoHomework();public void Exam();
}

注意事项:
1.一般一个文件夹中只定义一个类
2.main方法所在的类必须要使用public修饰
3.public修饰的类必须要和文件名相同
4.不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。



三、类的实例化

1.什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类,他们都是类(用户自定义的一种新的类型——引用类型),有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
实际上类实例化对象就类似于利用图纸建造房子,类就相当于图纸,经过工人师傅的建造,就能建造出房子(对象)。
格式:
类名 对象名称 = new 类名();
下面以PetDog类作为一个例子进行实例化:来实例化两个对象分别为阿黄和赛虎。

public class Main {public static void main(String[] args){PetDog dogh=new PetDog();dogh.name="阿黄";dogh.color="黑黄";dogh.barks();dogh.wag();PetDog dogs=new PetDog();dogs.name="赛虎";dogs.color="棕色";dogs.barks();dogs.wag();}
}

对于dogh和dogs:我们不将其称为变量,更习惯将其称为对象。
运行结果:
在这里插入图片描述
注意事项:
1.new关键字用于创建一个对象的实例。
2.使用 . 来访问对象中的属性和方法。
3.同一个类可以创建多个实例。

2.类和对象的说明

1.类实际上就是用来对一个实体(对象)来进行描述的,限定了类有哪些成员,比如说明书、填表格。
2.类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们称为对象。
3.一个类可以实例化出多个对象,实例化出的对象,占用实际的物理空间,储存类成员变量。
4。打个比方:类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
问题:·是先有类,还是先有对象呢?(类似于先有鸡还是先有蛋)
有说法是:先要有类,因为有了类之后才可以new对象,也有说法:先要有对象,然后才有类(一般出现在类抽象的阶段)。还是要看它的场景,都可以。

四、this引用

1.为什么要有this引用

先看一个日期类的例子:

public class Date {public int year;public int month;public int day;public void setDay(int y,int m,int d){year=y;month=m;day=d;}public void printDate(){System.out.println(year+"-"+month+"-"+day);}public static void main(String[] args){//构造三个日期类型的对象d1,d2,d3Date d1=new Date();Date d2=new Date();Date d3=new Date();//对d1,d2,d3的日期进行设置d1.setDay(2021,9,11);d2.setDay(2021,9,12);d3.setDay(2021,9,13);//打印日期中的内容d1.printDate();d2.printDate();d3.printDate();}
}

以上代码中Main中我们创建了三个对象,并通过Date类中的成员方法对对象进行设置和打印。
但是也会有疑问:
1.加入形参名不小心与成员变量名相同怎么办:那么函数体到底是谁给谁赋值,就会有四种情况:成员变量给成员变量,参数给参数,参数给成员变量,还是成员变量给参数。示例如下:

public void setDay(int year ,int month,int day){year=year;month=month;day=day;}

2.三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,那这两个函数是怎样知道打印的是那个对象的数据呢?

2.什么是this引用

所以this引用存在的意义就是要让成员方法知道在操作哪个对象
java编译器给每个“成员方法”增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过这些所有的操作用户是看不到的,由编译器自动完成,用户在实现代码时一般不需要显示给出。
实际程序(不需要我们自动添加):

public class Date {public int year;public int month;public int day;public void setDay(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDate(){System.out.println(this.year+"-"+this.month+"-"+this.day);}
}

注意:this引用的是调用成员方法的对象。
在这里插入图片描述
在这里插入图片描述

3.this引用的特性

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

从字节码层面来简单证明(利用IDEA中的jclasslib查看字节码):
在这里插入图片描述

4.this引用有没有可能为空

Date d2=new null;
d2.printDate();

1.代码能否通过编译?
2.程序能否正常执行?
调试中出现问题:空指针异常
在这里插入图片描述
注意:在java当中,this引用一定不能为空。


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
乐在TV
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有