Java语言程序设计——篇四(2)

news2024/9/21 18:48:14

类和对象

  • 方法设计
    • 定义和使用方法
    • 访问方法和修改方法
    • 方法的调用
    • 方法参数的传递
    • ✨方法重载
    • ✨构造方法(构造器)
    • 🚩this关键字
      • this关键字主要用于以下两种情况:
  • 编程练习
  • 静态变量和静态方法
    • 静态变量
    • 静态方法
      • 🌈解释:main方法的访问权限为何必须为public static?
  • 对象初始化和清除
    • 实例变量初始化
    • 成员变量默认值
    • 初始化次序
    • 静态变量的初始化
  • 💥垃圾回收
  • 包与类的导入
    • 包与package语句
  • 类的导入

方法设计

定义和使用方法

一个方法的定义包括两个部分

  • 方法声明
  • 方法体的定义
  • 语法格式

[修饰符] returnType methodName ([paramList]) {
    //方法体
}

访问方法和修改方法

能够返回成员变量值的方法称为访问方法(accessor method)。
能够修改成员变量值的方法称为修改方法(mutator method)。
  访问方法一般命名为getXxx(),因此,也称getter方法。
例如,double getSalary()
  修改方法一般命名为setXxx(),因此,也称setter方法。
例如,void setSalary(double s)

方法的调用

调用类的实例方法应先创建一个对象,然后通过对象引用调用。
调用类的静态方法,通常使用类名调用。
方法调用主要使用在三种场合:
😊1)用对象引用调用类的实例方法。
😊2)类中的方法调用本类中的其他方法。
😊3)用类名直接调用static方法。

方法参数的传递

  • 调用带参数的方法,需要向它传递参数。
  • 定义方法指定的参数称为形式参数,调用方法指定的参数称为实际参数
  • Java语言中,方法的参数是按值传递(pass by value)的,即在调用方法时将实际参数的值的一个拷贝传递给方法中的形式参数,方法调用结束后实际参数的值并不改变。
  • 当参数是基本类型时,将实际参数值的一个拷贝传递给方法,方法调用结束后,对原来的值没有影响。
  • 当参数是引用类型时,实际传递的是引用值,因此在方法的内部有可能改变原来的对象。

✨方法重载

Java允许在一个类中定义多个同名的方法,这称为方法重载(overloading)。

实现方法重载,要求同名的方法
  参数个数不同或参数类型不同
仅返回值不同不能区分重载的方法。

✨构造方法(构造器)

构造方法也叫构造器(Constructor) 。Java每个类都有构造方法
构造方法与普通方法的区别是:

  • 构造方法的名称必须与类名相同
  • 构造方法不能有返回值也不能返回void
  • 在创建对象时用new运算符调用。
  • 构造方法定义格式:
    [public | protected | private] ClassName([paramList]) {
    // 方法体
    }
    构造方法主要作用:
    创建对象并初始化对象的成员变量。
    构造方法分类
  • 无参数构造方法
  • 带参数构造方法
    注:构造方法也可以重载
    默认构造方法
    1️⃣如果省略构造方法,Java编译器会自动为该类生成一个默认的构造方法。
    2️⃣一旦用户为某类定义了构造方法,系统就不再提供默认的构造方法。
    3️⃣默认的构造方法无参数,方法体为空。
       例如:public Employee(){}
    4️⃣若class前面有public修饰符,则默认的构造方法前面也是public。

🚩this关键字

          this关键字表示对象本身。

this关键字主要用于以下两种情况:

  • 解决局部变量与成员变量同名的问题。
  • 用来调用该类的另一个构造方法。
    1、成员变量名与局部变量同名
    在一个方法的方法体或参数中,也可能声明与成员变量同名的局部变量。此时局部变量会隐藏成员变量。
    要使用成员变量就需要在其前面加上this关键字。
public void setSalary(double salary) 
{ this.salary = salary;} 

2、从一个构造方法调用另一个构造方法
从某一构造方法内调用另一构造方法,必须通过关键字this来调用的,否则编译出错。
this关键字必须写在构造方法内的第一行位置。

 public Cylinder(){  this(2.5,5,"红色"); }
 public Cylinder(double r,int h,String str){
     radius=r; height=h; color=str;
 }
package shujia_test1;

public class Csdn4_1 {

	private double radius;
	private int height;
	private double pi = 3.14;
	String color;

	public Csdn4_1() {
		this(2.5, 5, "红色");
		System.out.println("无参构造方法被调用了");
	}

	public Csdn4_1(double r, int h, String str) {
		System.out.println("有参构造方法被调用了");
		radius = r;
		height = h;
		color = str;
	}

	public void show() {
		System.out.println("圆柱底半径为:" + radius);
		System.out.println("圆柱体的高为:" + height);
		System.out.println("圆柱的颜色为:" + color);
	}

	double area() {
		return pi * radius * radius;
	}

	double volume() {
		return area() * height;
	}

	public static void main(String[] args) {
		Csdn4_1 volu = new Csdn4_1();
		System.out.println("圆柱底面积=" + volu.area());
		System.out.println("圆柱体体积=" + volu.volume());
		volu.show();
	}
}

运行结果:
在这里插入图片描述

编程练习

定义一个名为Csdn4_2的类表圆,其中含有double型的成员变量centerX、centerY表示圆心坐标,radius表示圆的半径。定义求圆面积的方法getArea()方法和求圆周长的方法getPerimeter()。
为半径radius定义访问方法getRadius和修改方法SetRadius。
定义无参数构造方法,在该方法中调用有参数构造方法,将圆的半径设置为1.0。
编写程序测试这个圆类的所有方法。(在main方法中创建对象c,调用getRadius、SetRadius、getArea()、getPerimeter 方法)

package shujia_test1;

public class Csdn4_2 {

	// 成员变量
	private double centerX;
	private double centerY;
	private double radius;

	// 无参数构造方法,调用有参数构造方法,半径默认为1.0
	public Csdn4_2() {  
	        this(1.0);  
	    }

	// 有参数构造方法
	public Csdn4_2(double radius) {  
	        this.centerX = 0.0; // 默认圆心在(0,0)  
	        this.centerY = 0.0;  
	        this.radius = radius;  
	    }

	// 半径的访问方法
	public double getRadius() {
		return radius;
	}

	// 半径的修改方法
	public void setRadius(double radius) {
		this.radius = radius;
	}

	// 求圆面积的方法
	public double getArea() {
		return Math.PI * radius * radius;
	}

	// 求圆周长的方法
	public double getPerimeter() {
		return 2 * Math.PI * radius;
	}

	// (可选)如果需要,也可以定义设置圆心的方法
	public void setCenter(double centerX, double centerY) {
		this.centerX = centerX;
		this.centerY = centerY;
	}

	// (可选)获取圆心的方法
	public double getCenterX() {
		return centerX;
	}

	public double getCenterY() {
		return centerY;
	}

	public static void main(String[] args) {
		// 创建Circle对象c,使用无参数构造方法,半径默认为1.0
		Csdn4_2 c = new Csdn4_2();

		// 测试getRadius方法
		System.out.println("圆的半径是: " + c.getRadius());

		// 测试setRadius方法
		c.setRadius(5.0);
		System.out.println("修改后的圆的半径是: " + c.getRadius());

		// 测试getArea方法
		System.out.println("圆的面积是: " + c.getArea());

		// 测试getPerimeter方法
		System.out.println("圆的周长是: " + c.getPerimeter());

		// (可选)测试设置和获取圆心的方法
		c.setCenter(3.0, 4.0);
		System.out.println("圆心的X坐标是: " + c.getCenterX());
		System.out.println("圆心的Y坐标是: " + c.getCenterY());
	}

}

运行结果:
在这里插入图片描述

静态变量和静态方法

静态变量

  用static修饰,也叫类变量
  所有实例共享一块内存空间。
  通常使用类名访问,也可以使用实例名访问。
对于某类的任何一个具体对象而言,静态变量是一个公共的存储单元
实例变量:
  未用static修饰。
  每个实例具有自己的内存空间。
必须使用实例名访问。
通常,static与final一起使用来定义类常量。例如,Java类库中的Math类中就定义了两个类常量:

   public static final double E = 2.718281828459045 ;              
   public static final double PI = 3.141592653589793 ; 

可以通过类名直接使用这些常量。例如:Math.PI

静态方法

静态方法:
  用static修饰,也叫类方法。
  只能直接访问静态变量和静态方法。(不通过对象调用时)
  通常使用类名调用,也可以使用实例名调用。
            类名.静态方法名( ); 对象名.静态方法名( );
实例方法:
  未用static修饰。
  必须使用实例名调用。
在这里插入图片描述

🌈解释:main方法的访问权限为何必须为public static?

由于JVM需要在类外调用main方法,所以该方法的访问权限必须是public;
而且在JVM运行时,并没有创建main方法所在的类的一个实例对象,所以它只能通过类名来调用main方法作为程序的入口,所以该方法必须是static。

对象初始化和清除

实例变量初始化

实例变量的初始化有下面几种方式:
1)声明时初始化或者使用默认值初始化。
2)使用初始化块。
3)使用构造方法初始化。

成员变量默认值

在类的定义中如果没有为变量赋初值,则编译器为每个成员变量指定一个默认值。
引用类型的变量,默认值为null
整型默认值是0
浮点型默认值是0.0
布尔型默认值是false
字符型是空字符( ’\u0000’)

初始化次序

如果在类中既为实例变量指定了初值,又有初始化块,还在构造方法中初始化了变量,那么它们执行的顺序如何,最后变量的值是多少?
1)首先使用默认值或指定的初值初始化,这里先将x赋值为100。
2)接下来执行初始化块,重新将x赋值为60。
3)最后再执行构造方法,再重新将x赋值为58。

静态变量的初始化

静态变量的初始化有下面几种方法:
1)声明时初始化或者使用默认值初始化。
2)使用静态初始化块。(加上static关键字)
3)使用构造方法初始化。
注意:对于static变量,不论创建多少对象(甚至没有创建对象时)都占一份存储空间。

💥垃圾回收

当一个对象不再被引用时,Java运行系统就在后台自动运行一个线程,销毁该对象并释放其所占的内存空间,这个过程称为垃圾回收(Garbage Collection,GC)。
后台运行的线程称为垃圾回收器(garbage collector)。
当一个对象不再被引用时,该对象才有可能被回收。

包与类的导入

包与package语句

Java语言使用包(package)来组织类库。包实际是一组相关类或接口的集合。
包主要有下面几个作用:

  • 功能相关的类和接口放到一个包中。
  • 实现命名管理机制,同名的类可以放在不同包中。
  • 实现对类的访问控制。
  • import导入包,格式为:
    import 包名1 [.包名2[.包名3…] ] . 类名 |*

例如:import java.util.;
import java.util.Scanner;
” 表示本层所有的类

在java程序中需要使用类的地方,都可以指明包含该类的包,这时不必用import。

例如:java.util.Scanner input = new java.util.Scanner(System.in);

Java包路径:根文件夹由环境变量CLASSPATH确定。
编译器会自动导入java.lang包和当前目录中的类。

类的导入

package com.exam;  //指明Odd类属于com.exam包,源文件在\src\com\exam
import java.util.Scanner; //导入Scanner类
public class Odd {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in); //直接使用Scanner类
    //输入一个正整数
    int num = input.nextInt();
    if(num % 2 ==0)
	System.out.println(num + "是偶数");
    else
	System.out.println(num + "是奇数");
    }
}
package com.exam; 

public class Odd {

public static void main(String[] args) {
    java.util.Scanner input = new java.util.Scanner(System.in);
    //输入一个正整数
    int num = input.nextInt();
    if(num % 2 ==0)
	System.out.println(num + "是偶数");
    else
	System.out.println(num + "是奇数");
    }
}

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

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

相关文章

玩客云刷入海纳思系统

玩客云(晶晨S805)刷机 | 海纳思系统 (ecoo.top) https://www.ecoo.top/update/soft_init/amlproject/USB_Burning_Tool_v2.1.3.exe https://node4.histb.com:9088/update/system/s805/hinas_s805_eMMC.burn.img.zip

【排序算法】—— 归并排序

归并排序时间复杂度O(NlongN),空间复杂度O(N),是一种稳定的排序,其次可以用来做外排序算法,即对磁盘(文件)上的数据进行排序。 目录 一、有序数组排序 二、排序思路 三、递归实现 四、非递归实现 一、有序数组排序 要理解归…

[算法] 优选算法(五):二分查找(上)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Linux虚拟机扩展磁盘空间

文章目录 在VM上进行扩展新的磁盘空间进入虚拟机将扩展的磁盘空间分配给对应的分区 VM 下的Linux虚拟机提示磁盘空间不足,需要对其进行磁盘扩容,主要有以下两步: 在VM上进行扩展新的磁盘空间 先关闭虚拟机在VM的虚拟机设置处进行硬盘扩展 …

STM32自己从零开始实操:PCB全过程

一、PCB总体分布 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由: 电源:从外部接入电源,5V接到中间,向上变成4V供给无线,向下变成3V供给下面的接口(也刻意放…

Java---SpringBoot详解二

勤奋勤劳铸梦成, 晨曦微露起长征。 汗水浇灌花似锦, 寒窗苦读岁月明。 千锤百炼心如铁, 万里征途志不倾。 持之以恒终有日, 功成名就笑谈中。 目录 一,统一响应结果 二,三层架构 三,分层解耦 四…

力扣第九题

回文数 提示: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 代码展示&#…

请你谈谈:AnnotatedBeanDefinitionReader 显式地注册一个Bean到Spring容器,以及注册并解析配置类

为了深入探讨Spring框架中的beanDefinition对象,我们不可避免地要提及BeanFactoryPostProcessor这一核心类,它作为Spring的bean工厂后置处理器发挥着关键作用。接下来,我们将详细讨论BeanFactoryPostProcessor的执行时机,这是一个…

顶顶通呼叫中心中间件-添加自定义变量到CDR方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-添加自定义变量到CDR方法(mod_cti基于FreeSWITCH) 1、自定义变量添加到cti.json 例:需要添加的变量为“bridge_uepoch" 2、添加进数据库 在数据库中找到表"cdr"在cdr表中也添加数据,数据名为新变量名&#xff1a…

基于Java的科大讯飞大模型API调用实现

写在前面:因为现在自己实习的公司新拓展的一个业务是结合AI的低代码平台,我负责后端的开发,之前一直都是直接使用gpt或者文心一言等ui界面来直接使用大模型,从来没有自己调接口过,所以本文记录一下自己第一次使用大模型…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

从零开始做题:什么奇奇怪怪的东西

题目 解题 mrf拓展名,macro recorder打开,鼠标键盘的记录 然后解压flag.zip即可,发现有一个挂载的文件,直接打开后 显示所有的隐藏文件 一个一个打开 然后进行拼接运行吧估计。 首先打开txt文件直接久就给出了代码&#xff1…

maven项目容器化运行之2-maven中使用docker插件调用远程docker构建服务并在1Panel中运行

一.背景 公司主机管理小组的同事期望我们开发的maven项目能够在1Panel管理的docker容器部署。上一篇写了先开放1Panel中docker镜像构建能力maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网-CSDN博客。这一篇就是演示maven工程的镜像构建、容器运行、运…

学习大数据DAY16 PLSQL基础语法5

目录 异常 自定义异常的格式 raise_application_error 处理异常 预定义异常 SQLcode和SQLerrm 非预定义异常 作业 触发器 触发器基本概念 DML触发器 DML触发器使用 instead of 触发器 管理触发器 作业2 函数、过程和包 函数 过程 参数 1. in 参数 2.out 参…

KALI使用MSF攻击安卓设备

这期是kali使用MSF进行安卓渗透的保姆级别教程,话不多说,直接开始。 准备材料: 1.装有kali的实体机或虚拟机(这里用实体机进行演示) 2.一台安卓10.0以下的手机 打开kali,先用ifconfig查看自己的kali IP地址…

MySQL第八次作业

一、备份与恢复作业: 创库,建表: CREATE DATABASE booksDB; use booksDB; CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NULL, copyright YEAR NOT NULL ); CREATE TABLE authors …

Git提交了敏感信息,通过BFG工具撤回或修改很久之前已经提交的内容

Git 提交了敏感信息怎么办? 这篇文章的由来,由于自己在提交代码的时候不小心把服务器的ip地址,还有数据库的密码给push到github上面去了。那么问题来了,我这个已经是一个月之前的提交的呢,现在还能改吗?别…

SIM900发送中文短信的处理过程

SIM900发送中文短信的处理过程 1、短信中心号码处理: 短信中心号码可以使用ATCSCA?获取。 在获取之前,最好将设置使用GSM字符: ATCSCS"GSM" OK ATCSCA? CSCA: "8613800755500",145 OK 这样一来,我就得…

Python酷库之旅-第三方库Pandas(023)

目录 一、用法精讲 58、pandas.isnull函数 58-1、语法 58-2、参数 58-3、功能 58-4、返回值 58-5、说明 58-6、用法 58-6-1、数据准备 58-6-2、代码示例 58-6-3、结果输出 59、pandas.notna函数 59-1、语法 59-2、参数 59-3、功能 59-4、返回值 59-5、说明 5…

线程的复习

目录 大纲Java中的线程概念创建线程的方法线程的生命周期线程的同步和通信线程的优先级和调度线程的中断 案例 大纲 Java中的线程概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作的部分。一个…