JAVA基础-方法(5)

news2024/10/7 8:26:15

目录


1、方法介绍

1、方法时定义在类体当中的
2、什么是方法:方法就是一个代码片段,,并且这个代码片段可以完成某个功能,并且可以重复使用
3、方法体中不能再定义一个方法

image.png
方法的的写法:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

:::tips
关于修饰符:
1、可选项,不是必须的
2、目前统一写成 public static
3、方法中带static 关键字的话,如何调用
类名.方法名(实际参数列表)
返回值类型:
1、一个方法是可以完成某个特定功能的,这个功能结束之后大多数都是需要
返回最终结果的,执行结果肯能是一个存在的数据,而这个具体的数据就是返回值类型

2、java的返回值类型有哪些
java任意一种类型都可以,包括基本数据类型和所有的引用数据类型

3、形式参数列表:简称形参
形式参数列表是局部变量:int A ;等于
:::

:::tips
程序的入口:主方法

	public static void main(String[] args) {}<br />		<br />		形式参数列表: String[]是一种应用数据类型 args 是一个局部变量<br />		其本质和自己写的方法没有区别<br />		<br />		<br />接收方法的返回值:比如计算两个数的和,返回值类型为int,所以用int类型的数据接收<br />		int i = sum(1,2)

:::

:::info

  1. 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
    2. 方法定义的前后顺序无所谓。
    3. 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
    4. 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
    5. return后面的返回值数据,必须和方法的返回值类型,对应起来。
    6. 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
    7. 对于void方法当中最后一行的return可以省略不写。
    8. 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写
    :::

2、方法的重载(在同一个类中,方法名相同,列表参数不同(数量不同,类型不同,顺序))

上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?
解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:

public static double max(double num1, double num2) {
  if (num1 > num2)
    return num1;
  else
    return num2;
}

:::info
功能相似的时候,方法名可以相同
在同一个类中
方法名相同
参数列表不同
数量不同
顺序不同
类型不同
:::

3、方法的重写(方法的覆盖-参数类别相同,返回值相同,存在继承关系)
public static double max(double num1, double num2) {
  if (num1 > num2)
    return num1;
  else
    return num2;
}

:::info
在重写方法时,需要遵循以下的规则:
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。

(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。

(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。

(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。

(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大。
:::

4、方法的调用

ava 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。

当方法返回一个值的时候,方法调用通常被当做一个值。例如:
:::info
int larger = max(30, 40);
:::
如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:
:::info
System.out.println(“欢迎访问菜鸟教程!”);
:::

方法的三种调用格式。

  1. 单独调用:方法名称(参数);
  2. 打印调用:System.out.println(方法名称(参数));
  3. 赋值调用:数据类型 变量名称 = 方法名称(参数);

5、方法的递归:
			 public static void main(String[] args) {
									m1(1);
													}
					public static void m1(int a){
								m1(1);
								}

6、构造方法

当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
不管你是否自定义构造方法,所有的类都有构造方法,因为 Java 自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。
一旦你定义了自己的构造方法,默认构造方法就会失效。

// 一个简单的构造函数
class MyClass {
  int x;
 
  // 以下是构造函数
  MyClass(int i ) {
    x = i;
  }
}

你可以像下面这样调用构造方法来初始化一个对象:

public class ConsDemo {
  public static void main(String[] args) {
    MyClass t1 = new MyClass( 10 );
    MyClass t2 = new MyClass( 20 );
    System.out.println(t1.x + " " + t2.x);
  }
}

7、方法的内存图分析


方法一的内存图分析

public class Student {
    int age;
    String name;
    address add;
    int id;
}
public class address {

    String street;
    String city;
    int Zipcode;

}

=========================方法一:或者以下写法,结果都是一样的======================
public static void main(String[] args) {
        Student s = new Student();
        int stuage=s.age;
        s.add = new address();
        s.add.city="上海";
        System.out.println(s.add.city);
    }
// new address(是一个对象)


=========================方法二:或者以下写法,结果都是一样的======================
    //a是一个引用,也是一个局部变量
        public static void main(String[] args) {
        Student s = new Student();
        address a = new address();
        s.add= a;
        a.city="山海";
        System.out.println(s.add.city);
    }

方法二的内存图分析

jvm的介绍:

1、jvm(java虚拟机)主要包含三块内存空间,分别是:栈内存堆内存,方法去内存
2、堆内存和方法区内存个有一个,一个线程一个站内存
3、方法调用的时候,发方法所需额内存空间在栈内存中分配,成为压栈,方法取执行结束后,该方法所属的内存空间释放,称为弹栈
4、栈中主要存储的是方法体当中的局部变量
5、方法的代码片段以及整个类的代码片段都会被储蓄到方法去内存当中,在类加载的时候这些代码会被加载
6、在程序执行过程中使用new运算符创建java对象,储蓄在堆内存当中,对象内部有实力变量,所以实例变量储存在堆内存当中
7、变量分类:
局部变量【在方法体中声明】
成员变量【在方法体外申明】
* 实例变量【前面修饰没有static】
* 静态变量【前面修饰有static】

public static void main(String[] args) { Student s = new Student(); int stuage=s.age; address a = new address(); a=null; s.add= a; a.city=“山海”; System.out.println(s.add.city); }8、静态变量储蓄在方法区域内存当中
9、三块内存中变化最频繁的是栈内存,最优数据的是方法区域内存,垃圾回收期主要针对的是堆内存
10、垃圾回收期【自动垃圾回收机制,gc机制】什么时候考虑将某个java对象的内存回收
当堆内存的java对象成为垃圾数据的时候,会被垃圾回收器回收
什么时候堆内存的家吧对象会变成垃圾
没够更多的引用指向他的时候
这个对象无法被方位,应为方位对象只能通过引用的方式访问


空指针:

    public static void main(String[] args) {
        Student s = new Student();
        int stuage=s.age;
        address a = new address();
        a=null;
        s.add= a;
        a.city="山海";
        System.out.println(s.add.city);
    }


如果a=null,会报空指针异常,空引用访问“实例”相关的数据会出现空指针

<br />	

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

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

相关文章

java项目容器化(docker)部署注意点

cgroup 支持 从 jdk 8u121 开始支持&#xff0c;即低于这个版本无法使用容器特性 https://bugs.java.com/bugdatabase/view_bug.do?bug_id8170888 https://bugs.openjdk.org/browse/JDK-8170888 https://bugs.java.com/bugdatabase/view_bug.do?bug_id8175898 https://b…

EPLAN_008#3D布局图

一、新建页 多线原理图纸画好以后 打开布局空间导航器——右键——新建 二、插入箱柜 菜单栏——插入——箱柜 三、显示安装板 然后调整视角 四、插入线槽 菜单栏——插入——线槽——选择合适的线槽——确定 按A键可以切换线槽方向&#xff0c;如果位置不对&#xff0c;可以再…

redis的cluster

1.我们的哨兵模式中&#xff0c;当主节点挂掉以后&#xff0c;此时哨兵会重新进行选举&#xff0c;选举出新的主节点去对外提供写服务 在选举的过程中,他redis整个集群是不提供写服务的 &#xff08;因为此时我们哨兵对外提供写服务的只有Master&#xff09; 2.我们单节点的red…

NRK3301语音芯片在智能窗帘上的应用

窗帘是人们日常生活中所经常使用的家居产品&#xff0c;传统的窗帘大多都需要手动拉动窗帘使用&#xff1b;存在着拉拽费劲&#xff0c;挂钩容易掉落等问题。随着数字化转型的升级&#xff0c;推进了窗帘市场的高质量发展。智能窗帘也“适时出现”出现了&#xff0c;一款带有语…

CV计算机视觉每日开源代码Paper with code速览-2023.10.20

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【目标检测】Click on Mask: A Labor-efficient Annotati…

Microsoft Edge中使用开源的ChatGPT

一、双击打开浏览器 找到&#xff1a;扩展&#xff0c;打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页&#xff0c;使用GPT 六、使用举例 提问 GPT回复

不想加班的小伙伴们,请把这四个神器焊在电脑上~

今天又来给大家分享干货啦&#xff0c;如果你下载视频没渠道&#xff0c;写方案没灵感思路&#xff0c;做表格太慢&#xff0c;做海报太复杂&#xff0c;那你一点要看这一篇&#xff0c;今天分享的四个宝藏网站专门解决以上问题&#xff0c;一起来看看吧&#xff01; 一、WeDow…

中文编程开发语言工具应用案例:ps5体验馆计时收费管理系统软件

中文编程开发语言工具应用案例&#xff1a;ps5体验馆计时收费管理系统软件 软件部分功能&#xff1a; 1、计时计费功能&#xff1a;只需点开始计时即可&#xff0c;时间直观显示 2、商品管理功能&#xff1a;可以管理饮料等商品 3、会员管理功能&#xff1a;支持只用手机号作…

Android---RecyclerView替代ListView

RecyclerView 简称RV&#xff0c;是作为 ListView 和 GridView 的加强版出现&#xff0c;目的是在有限的屏幕之上展示大量的内容。因此&#xff0c;RecyclerView 的复用机制的实现是它的一个核心部分。 RV 常规使用方式 // 1 RecyclerView.setLayoutManager(); // 2 Recycler…

JavaCV + FFmpeg 播放音视频

JavaCV FFmpeg 播放音视频 1、导入JavaCV库1.1 使用ffmpeg必要库1.2 简单FFmpeg命令 待续~~~~ FFmpeg documentation bytedeco/javacv - GitHub 1、导入JavaCV库 gradle下面这种会导入javacv-platform所有包&#xff0c;非常耗时&#xff1a;https://repo.maven.apache.org/…

西门子博途软件加密保护方法

一、程序块的专有技术保护 程序块的专有技术保护主要是对项目中的程序块&#xff08;OB、FB、FC、DB&#xff09;进行访问保护&#xff0c;如果没有专有技术保护密码则无法看到程序块中的具体内容&#xff0c;对于专有技术保护的 DB 块&#xff0c;如果没有密码只能读不能写。…

怎么理解函数式编程思维?

文章目录 &#xff08;2023年9.29号&#xff0c;正月十五家乡的月亮&#xff09; ​ 理解函数式编程要注重思维的转变。函数式编程聚焦于简洁的高阶函数&#xff0c;高阶函数注重封装底层运作原理来解决复杂的业务场景&#xff0c;比如 Scala、Groovy、Clojure 语言&#xff1a…

解决pip安装包后但是Pycharm检测不到

首先要知道python找包的原理&#xff1a;原理 之后把一下代码打印一下&#xff1a; import sys print(sys.executable)# /usr/bin/python2 print(sys.path)# [/usr/lib/python2.7, /usr/lib/python2.7/dist-packages, /usr/local/lib/python2.7/dist-packages] print(sys.prefi…

Leetcode—动态规划(背包问题)

1、背包基础问题&#xff1a;01背包 输入&#xff1a;背包最大重量为 4。物品重量数组weight[1,3,4]&#xff0c;对应的价值数组value[15,20,30]。 五部曲&#xff1a; 1、确定dp数组以及下标的含义 对于背包问题&#xff0c;dp采用二维数组&#xff0c;即dp[i][j]表示从下标…

第78篇:巧妙方法抓取某商用红队扫描器的4000多个漏洞利用exp

Part1 前言 大家好&#xff0c;我是ABC_123&#xff0c;本期分享一个真实案例。大约在两年前&#xff0c;有机会接触到一台红队扫描器设备&#xff08;也可以理解为渗透测试机器人&#xff09;&#xff0c;我抱着好奇的心态去那里做了一下测试&#xff0c;感觉还不错。里面大概…

jvm内存溢出溯源

1.先上神器 2.远程监控配置 JProfile是一款性能瓶颈分析工具&#xff0c;具体要干啥呢下面看 1&#xff1a;创建一个监控任务 2&#xff1a;选择tomcat版本 3&#xff1a;监控远程服务器 4&#xff1a;选择oracle 1.5.0 5&#xff1a;填写需要监控的服务器地址 6&#x…

后台交互-首页->与后台数据进行交互,wsx的使用

与后台数据进行交互wsx的使用 1.与后台数据进行交互 // index.js // 获取应用实例 const app getApp() const apirequire("../../config/app.js") const utilrequire("../../utils/util.js") Page({data: {imgSrcs:[{"img": "https://cd…

线性代数1:线性方程和系统

图片来自施泰德博物馆 Digital Collection (staedelmuseum.de) 一、前言 通过这些文章&#xff0c;我希望巩固我对这些基本概念的理解&#xff0c;同时如果可能的话&#xff0c;通过我希望成为一种基于直觉的数学学习方法为其他人提供额外的清晰度。如果有任何错误或机会需要我…

ToDoList全局事件总线学习笔记

全局事件总线 全局事件总线&#xff1a;任意组件间通信 安装全局事件总线 new Vue({……beforeCreate(){Vue.prototype.$busthis},…… })使用事件总线 接收数据&#xff1a;A组件想接收数据&#xff0c;则在A组件中给$bus绑定自定义事件&#xff0c;事件的回调留在A组件自…

2023年【氧化工艺】考试题库及氧化工艺考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 氧化工艺考试题库根据新氧化工艺考试大纲要求&#xff0c;安全生产模拟考试一点通将氧化工艺模拟考试试题进行汇编&#xff0c;组成一套氧化工艺全真模拟考试试题&#xff0c;学员可通过氧化工艺考试总结全真模拟&…