Java面向对象程序开发——基础

news2024/11/29 2:37:49

文章目录

  • 前言
  • 类和对象
    • 对象
  • 构造方法
  • 匿名对象
  • 变量作用域
  • this关键字
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

Java 是一种以面向对象编程为基础的编程语言
在 Java 编程中,一切皆为对象
每个对象都有其自己的属性和方法
对象可以通过类来定义,并且可以根据需要创建多个对象。
类描述了对象应该有的属性和方法,同时也定义了对象之间的关系。

面向对象指的就是一切以真实存在的个体为思考目标

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

类和对象

把若干个相似的个体归为一类
请添加图片描述
以下是一个简单的 Java 汽车类:
首先要知道哪些数据和行为需要管理
其次类中的属性可以被本类中所有方法直接使用

//定义一个类来进行描述
public class Car {
    // 汽车的属性----数据
    String brand; //品牌
    String model; //型号
    int year; //年份
    double price; //价格

    // 汽车的方法----行为
    public void run() {
		System.out.println(brand+"车跑得真快");
	}
    public double getPrice() {
        return price;
    }
}

对象

类仅仅是个定义,一种描述,不能在程序中直接使用

要根据定义的类在程序中创建这个类真正的对象,他是真实存在的

brand = A
model = V5
year = 2019
price = 280.00

构造方法

在java重要创造出对象来,要创造出一个特殊的方法——构造方法

一个类要创建对象,需要调用本类中的构造方法

构造方法语法:

  1. 方法名必须和类名相同
  2. 不能包含返回值类型
  3. 方法体中不能使用return返回一个值

还是以汽车类举例:

public class Car {
    // 汽车的属性
    String brand;
    String model;
    int year;
    double price;
    
    public void show() {
        System.out.println("这辆车品牌是" + brand);
    }
    //实际应用中,建议每个类定义两个构造方法
    //1.无参空构造方法
	public Car() {
		
	}
    //2.有参构造方法是通过传参给对象的属性赋初值
    public Car(String b, String m, int y, double p) {
        brand = b;
        model = m;
        year = y;
        price = p;
    }
    
}

接下来创建Car类对象:

public static void main(String[] args) {
//创建对象时,需要在new后面调用构造方法【Car() 调用构造方法】
		Car c1=new Car();
		
		//通过对象名.方式来使用属性和方法
		System.out.println(c1.brand);
		c1.brand= "奔驰";
		c1.model= "SUV汽车";
		c1.year = 2019;
		c1.price = 28900.00;
		c1.show();
		
		//定义一个新的,再创建一个对象
		Car c2 = new Car("宝马","小轿车",2022,5120.00);
		System.out.println(c2.brand);
		System.out.println(c2.model);
		System.out.println(c2.year);
		System.out.println(c2.price);
		c2.show();
	}

在这里插入图片描述

定义类时,可以不定义构造方法
在代码编译时 java会给这个类自动添加一个默认的无参构造方法
如果定义类时有构造方法,默认的将不再提供

匿名对象

Java中的匿名对象指的是没有名称的对象,即没有通过赋值给变量或者通过构造器创建实例的对象
匿名对象通常在代码中仅仅需要使用一次或者是只需要创建一个实例时使用
可以使用匿名对象调用方法来执行操作,如下所示:

我这里写一个类名为Animal的类,并加上一个测试类Main来讲解。

首先,我们声明一个Animal类,代码如下:

public class Animal {
    String name;

    public Animal() {
        // 无参构造方法
    }

    public Animal(String x) {
        name = x;
    }

    public void introduce() {
        System.out.println("I am an animal, my name is " + name);
    }
}

这个类也有两个构造方法,一个是无参构造方法,另一个是带一个参数的构造方法
带参构造方法接收一个字符串参数,将这个参数赋值给name属性。
类中还有一个introduce()方法,用来输出一个关于这个实例的简单介绍。

我们可以声明一个Animal测试类,代码如下:

public class AnimalTester {
	public static void main(String[] args) {
		Animal dog = new Animal("小黑");
		dog.introduce();
		dog.introduce();

		new Animal("小白").introduce();
		new Animal("小灰").introduce();

		// 尽量避免使用匿名对象
	}
}

我们使用带参构造方法创建一个某只狗的对象,并调用它两次的introduce()方法。
然后使用匿名对象创建两个不同的狗,并调用它们的introduce()方法

最后提醒了一下,尽量避免使用匿名对象,因为当我们使用匿名对象时,这个对象是没有被任何变量所引用的,因此一旦离开这个对象所在的语句块,这个对象就会被销毁(会被垃圾回收器回收)。这也是为什么我们要尽量避免使用匿名对象的原因。

变量作用域

全局变量=属性=实例变量
使用范围是本类中所有方法

【例】我们可以写一个类Music,代码如下:

public class Music {
    String name;
    int num; //属性或全局变量
	//类中的一个方法
    public void show() {
        System.out.println("这首音乐一共播放了" + num + "次");
    }

    public void test(int n) {
        // 方法中定义的变量可以是参数或方法体中定义的,都称为局部变量
        // 使用范围仅限于当前方法
        double d;
    }
}

Music类中有一个name属性和一个num属性,以及一个show()方法用于展示播放次数。
show()方法中,我们使用+运算符连接字符串和数字。

此外,Music类还有一个test()方法,接受一个参数n,并且在方法体内定义了一个局部变量d

这就是一个简单的Music类的实现。

this关键字

  1. java允许定义和属性同名的局部变量
  2. 访问方法内部时,如果直接使用变量名访问,那么访问的是局部变量
  3. 通过this.属性名,可以访问属性

【例】这里写一个运动员类Athlete,代码如下:

public class Athlete {
    String name;
    double height;
    String birthday;

    public void show(){
        System.out.println(this.name + "正在比赛中");
    }

    public Athlete() {
        this("Tom", 1.85, "1995-04-20");
        // 可以在构造方法中使用this(),来调用本类其他重载的构造方法
        // 必须出现在第一行
    }

    public Athlete(String name, double height, String birthday) {
        // System.out.println(this.name);
        this.name = name;
        this.height = height;
        this.birthday = birthday;
    }
}

Athlete类有一个name属性、一个height属性和一个birthday属性,以及一个show()方法用于展示选手正在比赛中。

Athlete类的构造方法中,我们使用this()方法来调用其他构造方法,来避免代码重复。
Athlete()构造方法中,我们将默认值设置为Tom, 1.85和1995-04-20

这就是一个简单的Athlete运动员类的实现

总结

定义类的基本步骤:

  1. 定义属性
  2. 定义两个构造方法(有参无参)
  3. 定义其他方法

构造函数:

当一个对象被创建时,构造方法会初始化对象,给变量赋初值

  1. 构造函数和类名完全一致
  2. 构造函数不要写返回值类型
  3. 默认编译器会创建一个无参的构造函数,但是一旦你写了构造函数,默认的将不再提供

super:
5. super子类的成员方法里调用父类的成员变量
6. super子类的成员方法里调用父类的成员方法
7. super可以在子类的构造方法里调用父类的构造方法

【例】
定义一个三角形类Triangle:

1、定义三个方法:getArea()求面积、getPer()求周长,showAll()分别在控制台输出底边、高、面积、周长。
2、有两个属性:底边base、高height。
3、通过构造方法Triangle(int base, int height),分别给两个属性赋值。

以下是Triangle类的代码实现:

public class Triangle {
    int base;
    int height;

    public Triangle(int base, int height) {
        this.base = base;
        this.height = height;
    }//有参
    
    public Triangle() {
        
    }//无参
    
    public double getArea() {
        return base * height / 2.0;
    }

    public double getPer() {
        double c = Math.sqrt(base * base + height * height);
        return base + height + c;
    }

    public void showAll() {
        System.out.println("底边:" + base);
        System.out.println("高:" + height);
        System.out.println("面积:" + getArea());
        System.out.println("周长:" + getPer());
    }
}

在上述代码中,我们定义了一个Triangle类,包含了底边base和高height两个私有属性,并编写了一个构造方法Triangle(int base, int height)来初始化这两个属性。
同时还实现了三个方法:getArea()用于计算三角形的面积,getPer()用于计算三角形的周长,以及showAll()用于输出三角形的底边、高、面积和周长。
getPer()方法中,我们使用了Math库中的sqrt()方法来计算三角形的斜边长度。

下面是一个简单的测试代码,供您参考:

public class TestTriangle {
    public static void main(String[] args) {
        Triangle t = new Triangle(5, 8);
        t.showAll();
    }
}

在题中的用到了构造方法,那个不用我们写,直接右键→源码进行选择即可:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图论试题2021

25 A:最大度是7,大于了顶点数6,故不是简单图的度序列。 C:树的度序列至少要有两个度为1的顶点 D:只要度数为奇数的个数有偶数个,就是度序列。 A:每棵树的中心由一个点或两个相邻点组成 B&…

碳中和城市建筑能源系统(1):能源篇(龙惟定)2022

碳中和城市建筑能源系统(1):能源篇 碳中和城市建筑能源系统(1):能源篇(龙惟定)2022 碳中和城市建筑能源系统(2):网络篇(龙惟定)2022 碳中和城市建筑能源系统&…

chatgpt赋能python:Python可以用i++吗?——探讨Python自增自减运算符

Python可以用i吗?——探讨Python自增自减运算符 Python作为一门高级编程语言,一直以来都备受开发者们的喜爱。Python以代码简洁、语言简单易懂、易于学习等特点而赢得了广大开发者的信赖。然而,在Python中并没有i这样的自增自减运算符&#…

计算机网络第一章——计算机系统结构(下)

提示:总角之宴,言笑晏晏。信誓旦旦,不思其反。反是不思,亦已焉哉。 文章目录 1.2.1 分层结构,协议,接口和服务为什么要有分层?怎么分层正式认识分层结构概念总结 1.2.2 OSI 参考模型ISO参考模型…

软考A计划-电子商务设计师-电子商务系统分析与设计

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

【JUC基础】14. ThreadLocal

目录 1、前言 2、什么是ThreadLocal 3、ThreadLocal作用 4、ThradLocal基本使用 4.1、创建和初始化 4.2、存储和获取线程变量 4.3、清理和释放线程变量 4.4、小结 4.5、示例代码 5、ThreadLocal原理 5.1、set() 5.2、get() 5.3、变量清理 5.4、ThreadLocalMap 6、…

硬链接与符号链接

硬链接与符号链接(Hard Link vs Symbolic Link) 两者对于 Linux 操作系统的异同、优缺点。 什么是链接? 在最一般的意义上,链接是两个对象之间的连接。更具体地说是在计算方面;根据牛津定义,链接是与代码或指令的连接&#xff0c…

【读书笔记】《平凡的世界》- 路遥

他又进一步想,郝红梅抛开他而和顾养民相好,也完全是正常的啊!他自己在哪方面都无法和顾养民比较。男女相好,这是两厢情愿的事,而怎能像乡俗话说的“剃头担子一头热”呢? 青春激流打起的第一个浪头在内心渐渐…

Eclipse不用删除之前的项目也可以多次导入相同的项目,操作十分简单!!

问题引入 当我们在学习时,常常需要多次导入网上的同一个案例进行查看效果或者导入自己的项目、用于进行代码测试,原来的项目要继续保留,作为备份,防止代码测试对代码修改过火,一去不返。但当我们导入在Eclipse项目管理…

JavaScript蓝桥杯------学海无涯

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 小蓝最近一直在云课平台学习,为了更好的督促自己,于是将每天的学习时间都记录了下来,但是如何更加直观的显示学习时间让小蓝很是苦恼。本题需要你使用 ECharts 帮助小蓝实现统计学习…

【C/C++】基础知识之动态申请内存空间new-delete

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

对Java远程热部署实践学习和分析

目录 一、热部署现状和必要性分析 &#xff08;一&#xff09;热部署定义和现状分析 &#xff08;二&#xff09;技术实现难度分析 &#xff08;三&#xff09;其必要性分析 二、走进美团Java远程热部署实践 &#xff08;一&#xff09;Sonic分析 &#xff08;二&#x…

Delphi11的多线程ⓞ,附送图片处理代码

Delphi11的多线程ⓞ OLD Coder , 习惯使用Pascal 接下来准备启用多线程&#xff0c;毕竟硬件多核&#xff0c;Timer不太爽了&#xff08;曾经的桌面&#xff0c;都是Timer——理解为“片”&#xff09; 突然想写写&#xff0c;不知道还有多少D兄弟们在。 从源码开始 用D11之…

第1节:vue cesium 概述(含网站地址+视频)

在开始介绍vue cesium之前&#xff0c;我们先聊聊cesiumjs&#xff0c;如果你对这块内容比较熟悉&#xff0c;可以直接跳过这节内容。 cesiumJS 简介 官方网址&#xff1a;https://cesium.com/platform/cesiumjs/ CesiumJS 是一个开源 JavaScript 库&#xff0c;主要用于基于…

Linux之理解文件系统——文件的管理

文章目录 前言一、磁盘1.磁盘的物理结构2.磁盘的存储结构3.磁盘的逻辑结构 二、文件系统与inode1.文件在磁盘中是如何存储的&#xff1f;2.对文件进行操作 三、软硬链接1.软链接创建软链接&#xff1a;inode删除软链接&#xff1a;软链接的作用&#xff1a; 2.硬链接创建硬链接…

chatgpt赋能python:Python另存为对话框:如何在Python中创建一个另存为对话框

Python 另存为对话框&#xff1a;如何在Python中创建一个另存为对话框 如果你是一名 Python 开发者&#xff0c;你可能会常常需要为你的应用程序添加一个另存为对话框。这个对话框使用户可以将他们的数据保存为一个新的文件&#xff0c;而不是覆盖原始文件。然而&#xff0c;很…

【JavaEE】Tomcat-Servelet第一个helloworld程序

Tomcat & Servelet第一个程序helloworld&#xff01; 文章目录 JavaEE & Tomcat & 第一个Servelet程序1. HTTP服务器 - Tomcat1.1 Tomcat的目录结构&#xff1a;1.2 启动Tomcat1.3 Tomcat的优点 2. Servelet框架2.1 创建Maven项目2.2 引入依赖2.3 创建目录2.4 写代…

【Java】wait和notify方法

wait方法wait()和join()的区别wait()和sleep()的区别notify()和notifyAll()实例 wait()和notify()方法都是Object类中的方法。由于每个类都会继承Object类&#xff0c;所以每个对象中都会包含这些方法。 wait方法 wait() 是让线程等待一段时间&#xff0c;死等。对应到线程的…

Linux账号管理与ACL权限设定(一)

Linux的账号与群组 Linux系统中&#xff0c;关于账号和群组&#xff0c;实际记录的是UID和GID的数字&#xff1b; 关于账号有两个非常重要的文件&#xff1a;/etc/passwd 和 /etc/shadow &#xff1b; /etc/passwd 文件结构&#xff1a; 账号名称&#xff1a;密码&#xff…

chatgpt赋能python:Python中另起一行输出的方法

Python中另起一行输出的方法 在Python编程中&#xff0c;我们需要经常输出内容到控制台或者文件中。而有时候&#xff0c;我们可能需要将输出的内容另起一行来符合排版或格式要求。这篇文章将介绍Python中另起一行输出的方法。 使用print函数 Python中最简单的输出方法就是使…