目录

一、类与对象的概念

1.1  什么是面向对象

1.2  什么是对象

1.3  什么是类

二、类与对象的定义

2.1  类的创建

2.2  对象的创建

2.3  练习创建两个dog对象,定义其属性并运行输出结果

三、 对象引用的特点

四、对象初始化


一、类与对象的概念

1.1  什么是面向对象

在我们学习java过程中,第一次接触类与对象语法的时候,可能会想什么是类?什么是对象?它们在java语言编程中有什么作用?为什么会使用类与对象?接下来我将带领大家来详细讲解类与对象。

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),就跟C++是一门面向过程的编程语言类似。在Java编写程序的时候,我们只需要关注对象,无需过多关注其中的过程

举例说明:我们在用洗衣机洗衣服的时候,需要把衣服放进洗衣机,倒入洗衣液,启动洗衣机,等洗衣机结束工作后,我们的衣服就洗好了。

       在这一系列过程中,人、衣服、洗衣液和洗衣机就可以理解为面向对象来执行,而洗衣机是如何去洗衣服以及如何甩干这一系列过程可以理解为面向过程来执行。Java语言只需要关注对象之间是如何处理的,不用过多关注其中处理过程。

1.2  什么是对象

对象通俗点来说就好比我们现实生活中的每一个实体,人、动物、汽车或者物品等等

1.3  什么是类

每个对象都有自己各自的属性,就拿洗衣机来说,一个洗衣机的属性包括产品名称、产品型号、产品尺寸和重量等,又或者说人作为对象,其属性包括姓名,性别,身高,体重等。

类是用来定义对象的属性描述,描述对象具有那些属性(外观尺寸)、哪些功能(用来干啥的),这样便于计算机来识别对象。

二、类与对象的定义

2.1  类的创建

       类在java语言编程创建格式为:

//创建类
class Person {//对象的属性、成员变量public String name; //名字public String sex; //性别public double height; //身高public double weight; //体重//对象的行为、成员方法public void run() {System.out.println("他等会去跑步");
}public void eat() {System.out.println("他正在吃饭!!!");
}

说明:1、class为定义类的关键字,

2、Person为类的名字,类名的创建采用大驼峰形式

3、{}为类定义对象的属性和行为,即类的主体

4、此处在定义属性时统一使用public修饰和写的方法中不带static关键字,下节类与对象(下)会详细解释

5、在定义类的时候,若使用public修饰类,则必须保证类名字和文件名相同

public class Person {  //此处使用public修饰类必须要和文件名相同//属性//行为
}

2.2  对象的创建

在Java中,对象的创建是使用 类 通过 new 关键字来实例化对象。用类类型创建对象的过程,称为类的实例化

代码格式如下:

public class Test {public static void main(String[] args) {Person  person = new Person();  //Person为类名,person为对象名person.name="小明";  //使用对象名.来访问类中的属性和方法person.eat();}
}

一个类可以实例化多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量(类的属性和方法)

public class Test {public static void main(String[] args) {Person  person = new Person();  //一个类可以实例化多个对象person.name="小明";  person.eat();Person  person1 = new Person();  person1.name="小军";  person1.eat();Person  person2 = new Person();  person2.name="小红";  person2.eat();}
}

2.3  练习创建两个dog对象,定义其属性并运行输出结果

代码如下:


class PetDog {public String name;//名字public String color;//颜色// 狗的属性public void barks() {System.out.println(name + ": 旺旺旺~~~"+"  颜色:"+ color);}// 狗的行为public void wag() {System.out.println(name + ": 摇尾巴~~~"+"  颜色:"+ color);}
}
public class Main {public static void main(String[] args) {PetDog dog1 = new PetDog(); //通过new实例化对象dog1.name = "阿黄";dog1.color = "黑黄";dog1.barks();dog1.wag();PetDog dog2 = new PetDog();dog2.name = "小白";dog2.color = "灰白";dog2.barks();dog2.wag();}
}输出结果:
阿黄: 旺旺旺~~~  颜色:黑黄
阿黄: 摇尾巴~~~  颜色:黑黄
小白: 旺旺旺~~~  颜色:灰白
小白: 摇尾巴~~~  颜色:灰白

三、 对象引用的特点

3.1  当一个引用为null时,引用不指向任何对象

如果类实例化对象为null,当访问对象中的属性及方法时,运行编译会报错,因为此时引用不再指向任何对象,无法访问对象中的属性

public class Class1 {public static void main(String[] args) {Person person = null; //引用为null,表示引用不指向任何对象person.name=" 小红";  //此时访问对象中的属性时,运行编译会报错person.sex=" 男 ";}
}

3.2  类与对象中没有引用指向引用

举例如下

public class Class1 {public static void main(String[] args) {Person person1 = new Person; Person person2 = new Person; person1 = person2;}
}

此时分析当person1=person2时,栈和堆的变化过程

(1)

        Person person1 = new Person; Person person2 = new Person;

此时创建2个对象person1和person2,在栈和堆中存放相应内容

(2)

person1=person2

当person1=person2时,person2把存放在栈中的地址赋给了person1,此时person1和person2在栈中存放的地址为同一地址,都指向存放在堆中的同一对象,所以没有引用指向引用这种说法。

我们可以总结为当对象person1=person2时,代表的是person1的引用指向了person2引用所指向的对象

3.3  一个引用只能同时指向一个对象

public class Class1 {public static void main(String[] args) {Person person1 = new Person; // 1person1 = new Person; // 2person1 = new Person; // 3person1 = new Person; // 4person1 = new Person; // 5}
}

当出现上述引用同时指向多个对象时,在Java语言中此时这个引用最后指向了最后一个对象,即一个引用只能同时指向一个对象

四、对象初始化

4.1  当我们创建好一个对象时,如果需要给对象设立初始值,这时可以调用类下的方法去设置到对象里面。

代码如下:

public class Texe {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);}public static void main(String[] args) {Texe d = new Texe();d.setDay(2022,11,12); //调用类下的setDay方法设置对象初始值d.printDate();}}

此时我们看到设置对象初始值通过调用类下的方法会有点麻烦,因此我们可以通过另外一种方法来给对象设置初始值,这种方式就是在类的下面给对象创建一个构造方法,这样就可以给对象中的成员进行初始化,但构造方法并不负责给对象开辟空间。

4.2  构造方法格式

代码如下:

public class Texe {public int year;public int month;public int day;public Texe (int year,int month,int day) { //创建对象的构造方法this.year = year;this.month = month;this.day = day;System.out.println("此方法调用");}public void priDay() {System.out.println(this.year+"-"+this.month+"-"+this.day);}public static void main(String[] args) {Texe d = new Texe(2022,11,12); //设初始值d.priDay();}}

注意点:

(1)构造方法中一般用public 修饰

(2)构造方法中方法名字必须与类名保持一致

(3)构造方法没有返回类型,void也不被允许

(4)创建对象时,若没有创建构造方法,则默认由编译器自动调用无参数构造方法,一旦自己创建对象的构造方法,编译器则不再提供。

(5)构造方法在对象的生命周期内仅只调用一次(相当于人的出生,每个人只能出生一次)

(6)构造方法可以重载 ( 用户根据自己的需求提供不同参数的构造方法 )
重载:只与方法名和参数类型有关(方法名相同,参数个数不同,参数类型不同,参数类型顺序不同)

Java类与对象详细讲解(上)相关推荐

  1. java .class 实例对象_通过Class类获取对象(实例讲解)

    通过Class对象获取对象的方式是通过class.newInstance()方式获取,通过调用默认构造参数实例化一个对象. /** * Created by hunt on 2017/6/27. * ...

  2. 杨校老师课堂之Java类与对象、封装、构造方法

    杨校老师课堂之Java类与对象.封装.构造方法 本篇文章内容如下: 面向对象 类与对象 三大特征--封装 构造方法 教学目标 能够理解面向对象的思想 能够明确类与对象关系 能够掌握类的定义格式 能够掌 ...

  3. JAVA MemCache 史无前例的详细讲解 看完包精通MEMCACHE

    JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE! 分类: 高并发_性能2012-08-22 09:15 5051人阅读 评论(0) 收藏 举报 javastringobje ...

  4. 实验2 Java类和对象的设计

    实验题目:Java类和对象的设计 一.上机目的和要求 理解面向对象的编程思想.类与对象的概念: 加深理解封装性.继承性和多态性: 掌握this.super.final.static等关键字的使用: 掌 ...

  5. Java字节码的详细讲解-刘宇

    Java字节码的详细讲解-刘宇 一.字节码的整体结构 二.字节码范围解析 2.1.魔数 2.2.版本信息 2.3.常量池(constant pool) 2.4.描述符规则 2.5.访问标志(Acces ...

  6. java 类与对象、封装、构造方法

    java 类与对象.封装.构造方法 面向对象 类与对象 三大特征--封装 构造方法 第1章 面向对象思想 1.1 面向对象思想概述 概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种 ...

  7. 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

    转载自   从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...

  8. 【Java】第7章 Java 类和对象 头歌Educoder实训作业(七)

    第1关:练习-Java类和对象之类的声明之复数运算 任务描述 本关任务:求两个复数相加后的结果. 两个复数之间相加的运算法则:实部与实部相加,虚部与虚部相加. 关于复数的定义,可以自行查阅,本实训不做 ...

  9. java类和对象程序_Java类与对象程序设计基础

    Java类与对象程序设计基础 一.实验目的: 通过编制一个独立应用程序,使得学生掌握Java的系统所提供类的引用方法:通过编制一个完整的应用程序,使得学生对Java的应用程序的基本构成和基本算法熟练掌 ...

最新文章

  1. ES6--函数的扩展
  2. Self-reflection for career
  3. redis可以存多少条数据_最新数据!在武汉14区排名多少可以上高中?精准定位...
  4. 公司mysql部署文档_Mysql部署文档
  5. Codeforce 1255 Round #601 (Div. 2) C. League of Leesins (大模拟)
  6. ffmpeg speex转换为mp3或者aac
  7. 本地项目上传到gitlab上
  8. SQL的TRUNCATE和DELETE
  9. item 12: 把重写函数声明为“override”的
  10. mac 关闭 mysqld 进程(亲测可用)
  11. 是谁让网管员的薪水如此低廉?
  12. UML?类图中聚合和组合的区别
  13. C语言程序入门(零基础入门)
  14. Flutter Key的原理和使用(五) 需要key的实例:可拖动改变顺序的Listview
  15. python随机生成一个整数n、求s=1+2+3_随机数字生成与数据杜撰—Python、Stata、R和Excel同步实现(附代码)...
  16. 咸阳强生告诉你吃什么食物养胃效果好
  17. Python基础(九)——print函数详解,配合参数示例详解
  18. 洛谷(P3373)线段树加乘混合模板
  19. js在打开新页面的时候用新的标签页打开并且在关闭打开的页面的时候刷新父页面的方法...
  20. truffle init/unbox 中遇到的许多错误以及解决

热门文章

  1. DDR,GDDR,LPDDR,QDR...谈谈现在主流的内存
  2. Win10 Edge浏览器,复制网址卡死
  3. 【分享专栏】CG模型哥布林创作—经验分享
  4. Loki Promtail 详解
  5. 人工智能在情绪方面更智能了?人类也应如此
  6. Delayed延时队列 来实现关闭已超时的任务或订单
  7. java div style_用js实现改变随意改变div属性style的名称和值的结果
  8. Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?
  9. 我的新浪博客搬家到CSDN博客啦!
  10. 莫里的导航图,大数据最早的实践之一