首页 > 编程语言 >Java方法

Java方法

时间:2024-04-29 14:13:36浏览次数:17  
标签:Java System person2 num 引用 实参 方法 out

  1. 基本类型和引用类型的不同
    对于基本类型,它的值直接保存在变量中;
    对于引用类型,它保存的是实际对象的地址,引用指向实际对象,实际对象中保存着内容;
  2. 赋值运算符对基本类型与引用类型的作用
    对于基本类型,赋值运算符会直接改变变量的值,原来的值会被覆盖掉;
    对于引用数据类型,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉,但是原来的对象不会被改变;
  3. 值传递:方法接收的是实参值的拷贝,会创建副本。
    引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
  4. 在java中只有值传递
  5. 代码的实践:
     //1. 传递基本数据类型参数
     public static void main(String[] args) {
       int num = 10;
       to(num);
       System.out.println("num = " + num);
     }
    
     public static void swap(int a, int b) {
      int temp=num;
      temp=num*num;
      System.out.println("temp = " + temp);
     }
     //执行结果:
     //temp = 100
     //num = 10
     //num没有变,传递的副本变化了,无论副本内容怎么修改,都不会影响原来的值;
    
     //2. 传递引用数据类型参数:数组,字符串都是引用数据类型
     public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        change(arr);
        System.out.println(arr[0]);
      }
    
     public static void change(int[] array) {
       // 将数组的第一个元素变为0
       array[0] = 0;
     }
     //执行结果:
     //1
     //0
     //这里要注意:这里传递的还是值,只不过这个值是实参的地址;也就是说change方法的参数拷贝的是 arr 实参)的地址,因此,它和arr指向的是同一个数组对象。这也就说明了为什么方法内部对形参的修改会影响到实参。
    
     //3. 传递引用数据类型参数ii
     //一个person的类
     public class Person {
       private String name;
       // 省略构造函数、Getter&Setter方法
     }
    
     public static void main(String[] args) {
       Person xiaoZhang = new Person("小张");
       Person xiaoLi = new Person("小李");
       swap(xiaoZhang, xiaoLi);
       System.out.println("xiaoZhang:" + xiaoZhang.getName());
       System.out.println("xiaoLi:" + xiaoLi.getName());
    }
    
     public static void swap(Person person1, Person person2) {
       Person temp = person1;
       person1 = person2;
       person2 = temp;
       System.out.println("person1:" + person1.getName());
       System.out.println("person2:" + person2.getName());
     }
     //输出的结果:
     //person1:小李
     //person2:小张
     //xiaoZhang:小张
     //xiaoLi:小李
     //swap 方法的参数 person1 和 person2 只是拷贝的实参 xiaoZhang 和 xiaoLi 的地址。因此, person1 和 person2 的互换只是拷贝的两个地址的互换罢了,并不会影响到实参 xiaoZhang 和 xiaoLi 。
    
  6. 因此java中只有值传递,没有引用传递
    如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。
    如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。
  7. 方法的重载
    重载就是在一个类中,有相同函数的名称,但是形参不同的函数
    方法重载的规则:
    • 方法名称必须相同
    • 参数列表必须不同(个数不同,类型不同,参数排列顺序不相同)
    • 方法的返回类型可以相同也可以不相同
    • 仅仅返回类型不同不足以称为方法的重载
  8. 可变长参数:一个方法中只能指定一个可变参数,且必须是方法的最后一个参数
  9. 递归:自己调用自己,必须要有递归头(终止条件)和递归体(处理方法),不然会有栈溢出。

标签:Java,System,person2,num,引用,实参,方法,out
From: https://www.cnblogs.com/hytip/p/18165604

相关文章

  • java代码运行出现DENIED Redis is running in protected mode because protected mode
    这个错误是因为开启了保护模式,导致出错。所以需要关闭redis的保护模式。编辑redis的redis.config  注释bind127.0.0.1 、修改protected-mode为no、修改 daemonize为no然后重启redis ......
  • 如何批量进行U盘加密?U盘加密的方法有哪些?
    批量进行U盘加密,可以使用专业的U盘批量加密工具,例如U盘内存卡批量只读加密专家。这种工具支持同时连接多个U盘进行加密,操作简便,加密速度快。在加密过程中,可以根据需要选择保护类型,如常规、隐藏等,以满足不同设备上的使用需求。U盘加密的方法主要有以下几种:使用计算机系统自带的加......
  • mORMot 1.18 第08章 Delphi中的服务器端JavaScript
    mORMot1.18第8章Delphi中的服务器端JavaScript在mORMot框架中,对JavaScript脚本的支持被称为MonkeyOnRails(版权归PavelMashlyakovsky所有,邮箱:[email protected]),它借助了Mozilla基金会的SpiderMonkey类。mORMot允许程序员编写功能强大的应用程序,但如果客户希望自定义应用......
  • Junit 4 测试方法
    1.JUnit最佳实践指南原文: https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/我假设您了解 JUnit 的基础知识。如果您没有基础知识,请首先阅读(已针对JUnit5更新)。现在,我们将介绍在编写测试用例时必须考虑的 junit 最佳......
  • 启发式评估(heuristic evaluation)方法介绍--转[2011.12.23 sina blog]
    启发式评估(heuristicevaluation)方法介绍(2008-09-0911:56:52)转载▼标签:it分类: 2互联网产品设计什么是启发式评估?启发式评估法就是使用一套简单、通用、有启发性的可用性原则来进行的可用性评估。即几个评审人员根据一些通用的可用性原则和自己的经验来发现......
  • javac编译java后缀编成class
    前言全局说明一、编译独立.java后缀文件此java文件,没有依赖外部任何jar包。文件名:test_print.javapublicclasstest_print{publicstaticvoidmain(String[]args){if(args.length==1){System.out.println("[INFO]Userargs:"+args[......
  • 实现HTML标签的转义、反转义的几种方法
    原文链接:https://blog.csdn.net/huanggang0101/article/details/99621029方法一:通过正则表达式进行替换1,HTML标签的转义方法//HTML标签转义(<-----><)functionhtml2Escape(sHtml){returnsHtml.replace(/[<>&"]/g,function(c){return{'<':�......
  • Java线程池控制线程存活时间的机制
    核心线程:永不销毁:此类线程处理完任务后,会调用任务队列的take方法,此方法是阻塞的,假如队列为空了,该线程就会被阻塞住,线程就能一直存活着了。非核心线程:空闲指定时间后,会被销毁:此类线程处理完任务后,会通过调用任务队列的pop方法,此方法接收一个时间参数且是限时阻塞的,假如队......
  • 顶级 Javaer 都在用的 20 个类库,真香!
    优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间来学习API,尤其是在阅读了EffectiveJava3rdEdition之后,JoshuaBloch建议在Java3rdEdition中使用现有的API进行开发,而不是为常见的东西编写新的代码。这对我来说很有意义,因为这些......
  • Java 线程Dump分析
    一般当服务器挂起,崩溃或者性能低下时,就需要抓取服务器的线程堆栈(ThreadDump)用于后续的分析。在实际运行中,往往一次dump的信息,还不足以确认问题。为了反映线程状态的动态变化,需要接连多次做threaddump,每次间隔10-20s,建议至少产生三次dump信息,如果每次dump都指向同一个问题,我们......