精华内容
下载资源
问答
  • Java语言后台实现调用url路径并传参
  • Java命令行传参

    2021-11-04 21:22:00
    Java命令行传参 Java的程序运行时,是可以靠命令行给main()函数传参的 主函数中的参数String[] args就是可以向主函数传参的接口: public class study { public static void main(String[] args) { //函数体内部就...

    Java命令行传参

    Java的程序运行时,是可以靠命令行给main()函数传参的

    主函数中的参数String[] args就是可以向主函数传参的接口:

    public class study {
        public static void main(String[] args) {
            //函数体内部就可以对传进来的字符串数组进行操作了
            for (String str: args){
                System.out.println(str);//输出传进来的字符串数组
            }
        }
    }
    

    首先在命令行中javac编译你的文件:

    javac study.java
    

    注意一定要在该文件的路径下编译。

    然后运行,此时就可以通过命令行向main()函数传递参数。例如下面传入了多个字符串“this sentence is for test”:

    java study this sentence is for test
    

    输出结果:

    this
    sentence
    is
    for
    test
    

    需要注意的是,如果文件是在包里,一定要记得路径正确,运行java文件的时候路径要回到最上面一层。以我自己的路径为例:

    在这里插入图片描述

    展开全文
  • Java函数传参(String的不可变性)

    千次阅读 2018-07-20 15:17:27
       本篇博客无意讨论Java里面函数传参是否只有值传递还是值传参和引用传参同时存在,仅讨论函数传参的一些原理。   一. 什么是函数传参? 最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交换...

       本篇博客无意讨论Java里面函数传参是否只有值传递还是值传递和引用传递同时存在,仅讨论函数传参的一些原理。  

    一. 什么是函数传参?

    最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交换的功能,因为它传递的是基本数据类型。类似于C++的值传递:二级指针和指针引用函数传参(C++)。这里是Java的函数传参,所以下面将分别介绍两种传参的方式。

    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            int a=11;
            int b=22;
            functionTest.swap(a,b);
            System.out.println(a);  //11
            System.out.println(b);  //22
        }
        public void swap(int a,int b){
            int c=a;
            a=b;
            b=c;
        }
    }
    

    二. 基本数据类型(值传递)

    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            int a=11;
            int b=22;
            functionTest.swap(a,b);
            System.out.println(a);
            System.out.println(b);
        }
        public void swap(int c,int d){
            int mid=c;
            c=d;
            d=mid;
        }
    }
    

      functionTest.swap(a,b)调用之前,a,b两个变量如下:
    ab
      那么在调用functionTest.swap(a,b)之后且未执行int mid=c;之前吶?函数仅完成了函数参数与传入参数的赋值,由于c,d在函数体内重新分配地址,并使用a,b的值进行赋值,在这之后,函数体内对c,d的操作就与a,b无关了。
    函数执行过程
      结论:基本数据类型传入函数参数在函数体内对参数进行的操作不影响原数据

    三. 对象数据类型(引用传递)

    //和上面代码不同的是int换成了StringBuilder类型,为什么不是String吶?
    //因为String类型有着自己的特殊性,这又区别于其它的对象数据类型。
    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            StringBuilder a=new StringBuilder("11");
            StringBuilder b=new StringBuilder("22");
            functionTest.swap(a,b);
            System.out.println(a);  //11
            System.out.println(b);  //22
        }
        public void swap(StringBuilder c,StringBuilder d){
            StringBuilder mid=c;
            c=d;
            d=mid;
        }
    }
    
    

    引用传递
      从输出结果来看,似乎和基本数据类型一样,都没能改变实参a,b的值。引用类型我们依然可以看做是地址的传值,而带有&的则表示地址的值。通过直接引用赋值的方式也不能更改实参的值,这个看起来和上面的基本数据类型是一样的。既然直接更改地址不可行,那么我们可以尝试更改地址指向的值(即上图最后一列的值)。

    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            StringBuilder a=new StringBuilder("11");
            StringBuilder b=new StringBuilder("22");
            functionTest.swap(a,b);
            System.out.println(a);  //22
            System.out.println(b);  //11
        }
        public void swap(StringBuilder c,StringBuilder d){
            StringBuilder mid=new StringBuilder(c);//申请新的内存复制c的值
            c.delete(0,c.length());//清空c的值
            c.append(d);//将b的值追加在c之后,两句合起来就是d的值赋给c
            d.delete(0,d.length());
            d.append(mid);
        }
    }
    

    引用传值
      这次我们通过实参的值更改却是成功了。

      结论:对象数据类型传入函数参数在函数体内对参数地址的操作不影响原数据,对地址指向的值更改直接更改了实参的值(毕竟它们指向一个地方)

    四. 对象数据类型(引用传递)的一些特例

      说是特例,不过是一些对象数据类型在Java语言里面存在着一些特性,如String类型指向的值不可变性,包装类(Integer,Float,Double…),下面就说明一下上面列举的这些例子。
    Ⅰ. String类型的值不可变性

    package lizi;
    
    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            String strA="123";
            functionTest.test(strA);
            System.out.println(strA);  //123
        }
        public void test(String strB){
            strB="456"; 
        }
    }
    
    

    String传引用
      上面看似是想通过修改值来更改实参的值,然而却是失败了,这不与引用传参改变地址指向的值可以改变实参的值的结论相违背吗?我们想改变地址指向的值,然而由于String的值不可变,Java并不允许我们直接修改它的值。Java将456存储在一个新申请的地址里面,而原来存在123的地址依然还是123,再将456的地址返回给strB,看似更改地址的值,却被String的特性弄成了修改地址,自然修改完地址与实参的关系也就断了,所以还是符合上面引用传参的结论。

    Ⅱ. 包装类的自动装箱

    public class FunctionTest {
        public static void main(String[] args) {
            FunctionTest functionTest=new FunctionTest();
            Integer intA=111;
            functionTest.test(intA);
            System.out.println(intA);//111
        }
        public void test(Integer intB){
            intB=555;
        }
    
    }
    

      上面test函数字节码如下:

    public void test(java.lang.Integer);
        Code:
           0: sipush        555
           3: invokestatic  #14//赋值时调用了valueOf函数进行自动装箱操作           
           // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
           6: astore_1
           7: return
    }
    
    

      由于赋值时候的valueOf函数调用返回了一个Integer对象,变成了和String类似的地址的改变,自然也就无法影响到实参intA的值了。

    展开全文
  • 许多不同意我的读者用 C++ 语言作为例子。因此,在此栏目中我将使用 C++ 和 Java 应用程序进一步阐明一些事实。  要点  读完所有的评论以后,问题终于明白了,考试吧提示: 至少在一个主要问题上产生了混淆。因为...
  • java中没有引用传递,只有值传递 分析:java有基本数据类型和引用数据类型两种,基本数据类型变量存储的就是数值,而引用数据类型变量存储的是引用,也就是能指向堆中对象的地址 为什么说java只要值传递呢? 对于基本...

    java中没有引用传递,只有值传递

    分析:java有基本数据类型和引用数据类型两种,基本数据类型变量存储的就是数值,而引用数据类型变量存储的是引用,也就是能指向堆中对象的地址

    为什么说java只要值传递呢?

    对于基本数据类型,传参传递的就是数值的副本,也就说把实参的数据复制给形参一份,不管形参怎么改变,实参是不受影响的

    对于引用数据类型,传参传递的是引用的副本,也就说把引用(对象的地址)复制了一份,这时候实参和形参都是引用(是两个引用,指向相同,区分C语言指针传递,一个对象指针只有一个,实参和形参是一个指针),都指向在堆中相同的对象

    对形参引用两种操作的区别

    • 1把形参引用指向一个新对象

                  这时改变的只是形参引用的指向,而实参引用和实参引用指向的对象都没有被改变

    •  2通过形参引用找到指向的对象,并对该对象修改

                 因为实参引用和形参引用指向的对象相同,这是实参引用指向的对象被修改了

    具体测试代码

    传参基本数据类型

            
    

    引用数据类型

               1把形参引用指向一个新对象

            public void setInt(Integer b) {
    		b = new Integer(2);
    		System.out.println("b的值为:"+b);
    	}
    	
    	public static void main(String[] args) {
    		Integer a = 1;
    		Test1 t = new Test1();
    		
    		t.setInt(a);
    		System.out.println("a的值为:"+a);
    		
    
                    //没有改变a的值
    		/*
    		 * 输出 
    		 * b的值为:2 
    		 * a的值为:1
    		 */
    
    	}
    
            //String类的直接赋值就相当于新创建另一个对象(但还是区别直接new的,可以这样理解)
            public void setString(String s2) {
    		s2 = "bb";
    		System.out.println("s2的值为:"+s2);
    	}
    	
    	public static void main(String[] args) {
    		String s1 = "aa";
    		
    		//调用setString()方法,试图修改s1的值
    		Test t = new Test();
    		t.setString(s1);
    		
    		System.out.println("s1的值为:"+s1);
    	}
    	
            //没有改变s1的值
    	/*
    	 * 输出 
    	 * s1的值为:aa 
    	 * s2的值为:bb
    	 */

    2通过形参引用找到指向的对象,并对该对象修改

    	public void setArray(int[] b) {
    		b[0] = 4;
    		System.out.println("b数组:"+b[0]+b[1]+b[2]);
    	}
    	
    	public static void main(String[] args) {
    		int[] a = {1,2,3};
    		
    		Test2 t = new Test2();
    		t.setArray(a);
    		
    		System.out.println("a数组:"+a[0]+a[1]+a[2]);
    	}
    	
    	//a数组的值发生了改变
    	/*
    	 * 输出 
    	 * 423 
    	 * 423
    	 */
    	

     

     

     

    展开全文
  • Java 方法传参

    2017-09-19 11:08:48
    java程序设计语言总是采用值传递进行调用,无论是基本数据类型还是对象 由以下实例代码即可证明:public static void main(String[] args) { Employee a = new Employee("a", 1000, new Date()); Employee b = new...

    java程序设计语言总是采用值传递进行调用,无论是基本数据类型还是对象
    由以下实例代码即可证明:

    public static void main(String[] args) {
    
        Employee a = new Employee("a", 1000, new Date());
        Employee b = new Employee("b", 3000, new Date());
    
        System.out.println("a: " + a); 
        // a: Employee [name=a, salary=1000.0, hireDay=Wed Sep 06 13:49:43 CST 2017, id=0]
        System.out.println("b: " + b); 
        // b: Employee [name=b, salary=3000.0, hireDay=Wed Sep 06 13:49:43 CST 2017, id=0]
    
        swap(a, b);
    
        System.out.println("a: " + a);
        // a: Employee [name=a, salary=1000.0, hireDay=Wed Sep 06 13:49:43 CST
        System.out.println("b: " + b);
        // b: Employee [name=b, salary=3000.0, hireDay=Wed Sep 06 13:49:43 CST  
    
        }
    public static void swap(Employee a, Employee b) {
        Employee temp = a;
        a = b;
        b = temp;
    }
    

    由此可以得出java中方法参数使用的情况:
    - 一个方法不能修改一个基本数据类型参数的值(值传递,只是对该参数的拷贝)
    - 一个方法可以改变对象参数(即引用类型参数)的状态(对象的实例变量的值是可以在方法中改变的)
    - 一个方法不能让对象参数引用一个新的对象(java传参采用按值传递,对象类型参数传递时是对其引用的拷贝,而不是对象本身)

    展开全文
  • Java调用exe并传参

    千次阅读 2020-05-19 11:59:10
    文章目录问题来源解决思路测试结果完整代码JavaCodeexe源语言(c++)代码 问题来源 最近遇到一个课设,需要用编译原理的知识写一个sql解释器; 整个项目用的是SpringBoot框架,但是不能愉快的白嫖MySql了, 既然需要...
  • 最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写Java接口和复用已有的Python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称拼写的人,所以,...
  • 这篇博客的重点在于 对Java引用的赋值操作只会将这个引用指向一个新的对象,原来的对象不变...这篇博客的灵感来源于我参加的一次面试,面试官与我比较深入的讨论了Java函数传参的问题,当时与他讨论了好半天,不知道是
  • ###JAVA中的包装类型传参(Integer,String等对基本数据类型包装类),本质还是等同于值传递(即传递参数副本)。引用类型中传参除去JAVA基本类型的包装类。 String为例,Stringbuffer和StringBuild就符合引用传参...
  • 本文主要讲解Java方法传参、值传递、引用传递,其中涉及到JVM的相关知识,最近弥补了这一块,发现理解很多问题都变得豁然开朗了,知其所以然!(JVM在我其他博客中有详细辨析) 在刷力扣题目时,遇到这样一个问题,...
  • java中String的传参问题

    2020-02-14 11:16:58
    java传递参数时 如果是8种基本数据类型,值传递,不会修改原来值; 如果是对象,传递地址,会修改原来值。 实参String变量传给形参,是传一个地址过去,形参改变,String生成新对象,对应地址的String值相应改变 ...
  • C语言与java中函数传参比较 首先先说结论:C语言中参数传递有值传递,地址传递,引用传递。但java中的参数传递只有值传递 1.C语言中的参数传递 1>值传递 值传递非常好理解,其实就是对函数所...
  • JAVA传参和引用传参

    千次阅读 2013-08-01 11:33:25
    当然,我在这里只是就我自己对Java和其他语言的一些认识谈谈自己的理解和看法。  首先,我们要明确下面这两条不可争论的事实了:  【1】、对象是传引用的  【2】、基本类型是传值的  我对这个问题是这样理解...
  • java 中基础类型是值传参,对象类型是引用传参 对象类型: new出来的都是, 包括数组 2. 值传参举例 public class Main { public static void main(String[] args) { int x = 3; Main.swap(x); System.out....
  • 看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了。还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎么懂...
  • java–关于值传参和引用传参 java作为面向对象的编程语言,其语法其实和C差不多 相信作为编程初学者,对于写一个交换两个变量的值的函数应该遇到过该问题 c值传递和指针传递: #include void swap(int a,int...
  • Java的方法传参

    2021-03-19 15:20:30
    Java程序设计语言总是采用按值调用。 对于基本类型的变量是直接传值,而对于引用类型的变量则会传的是这个对象的地址。 Java总是按值调用,所以,对于str,student则是拿的它们的值,而这个值为实例对象的首地址。 ...
  • Java 方法传参方式: 按值调用

    千次阅读 2016-11-07 09:03:04
    Java 2016-11-01 22:20 程序设计语言中将参数传递给方法的几种方式: 按名调用(call by name) : Algol 语言采用此方式, 已成为历史; 按值调用(call by value) : 方法接收到的是调用者提供的 变量值 ; 按引用...
  • Java 脚本功能是在 javax.script 包中。这是一个比较小的,简单的API。脚本的出发点是 ScriptEngineManager 类,ScriptEngineManager是一个工厂集合,可以通过name或tag的方式获取某个脚本的工厂并生成一个此脚本的...
  • Java方法的参数传递

    2018-09-02 19:55:38
    对于程序设计语言来说,一般方法(函数)的参数传递有两种:按值传递和按引用传递。  按值传递意味着当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。因此,如果方法修改了该参数,仅改变副本,而...
  • 我相信很多人的答案会是4,对于基本类型,Java和很多语言一样用值传递这个很好理解,可是如果是对象类型,难道不是引用传递吗?这里我们就要先梳理下值传递和引用传递的区别了: 值传递(pass by value)是指...
  • 网上关于java调用sap接口的相关资料少得可怜,为了大家更方便,我把开发过程中使用到的sap调用方式以文字+代码介绍出来 基本使用,首先得把sap相关环境弄好,网上挺多的,我就不去做重复工了 private static ...
  • 这边调用了setsex()方法后就要解决这个异常了 解决这个检查异常,需要用throws对外抛出或者自己内部trycatch解决 ②接下来用构造器来传参 如图,构造器传参后,绕过了setsex()方法,并没有对sex私有属性进行限制...
  • Java方法传参和可变参数的个别说明,以及foreach的语法和编译后的实现
  • JAVA主函数以及main函数传参详解

    千次阅读 2012-10-17 21:37:00
    JAVA中的主函数是我们再熟悉不过的了,相信每个学习过JAVA语言的人都能够熟练地写出这个程序的入口函数,但对于主函数为什么这么写,其中的每个关键字分别是什么意思,可能就不是所有人都能轻松地答出来的了。...
  • java方法传对象参数 在上一篇文章中 ,我研究了与方法和构造函数的长参数列表相关的一些问题。 在那篇文章中,我讨论了用自定义类型替换基元和内置类型以提高可读性和类型安全性。 这种方法使方法或构造函数的众多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,774
精华内容 7,909
关键字:

java语言传参

java 订阅