精华内容
下载资源
问答
  • 程序在执行过从中,参数传递问题:1、传递的数据是基本数据类型2、传递的数据是引用数据类型传递的数据是基本数据类型举个栗子public class p {public static void m1(int i) {i++;System.out.println("m1 -- > ...

    程序在执行过从中,参数传递问题:

    1、传递的数据是基本数据类型

    2、传递的数据是引用数据类型

    传递的数据是基本数据类型

    举个栗子

    public class p {

    public static void m1(int i) {

    i++;

    System.out.println("m1 -- > " + i);

    }

    public static void main(String [] args) {

    // 局部变量

    int i = 10;

    // 调用

    m1(i);

    System.out.println("main -- > " + i);

    }

    }

    看图解释,不要猜!

    c973f4a27714

    JVM.png

    1、程序运行时,在java虚拟机中,只创建了栈,没有创建对象,即没有创建堆。

    2、main 和 m1 中的 i 是两个不同的局部变量,只是赋值的关系。

    3、在栈中,main方法 i = 10,然后调用 m1 (i), 将 i = 10,赋值于 m1 中的 i 。

    4、m1 中的 i = 10 后, i++,即 i = 11.

    5、输出结果

    m1 -- > 11

    main -- > 10

    传递的数据是引用数据类型

    public class p {

    public static void m1(Animal a) {

    a.age++;

    System.out.println("m1 -- > " + a.age);

    }

    public static void main(String [] args) {

    // 1、创建Animal队形

    Animal a = new Animal(10);

    m1(a);

    System.out.println("main -- > " + a.age);

    }

    }

    // 动物

    class Animal {

    // Field

    int age;

    // Constructor

    Animal(int _age){

    age = _age;

    }

    }

    看图解释,不要猜!

    c973f4a27714

    JVM.png

    1、在栈中压入 main方法 并 执行 Animal a = new Animal(10);。

    2、new Animal(10) 中 在堆中 创建对象 并赋值 age = 10。 Animal a 指向 对象的 地址。

    3、main 调用 m1方法,压入堆中,并通过传递对象地址,将m1中的对象引用赋值为相同地址,即指向相同的对象。

    4、即m1对age操作同样影响main中的age值。

    5、输出结果

    m1 -- > 11

    main -- > 11

    展开全文
  • Java方法调用参数传递问题方法调用的时候参数是如何传递的呢?其实在调用的时候参数传递方法,这个过程就是赋值的过程,参数传递和“赋值规则”完全相同,只不过参数传递在代码上看不见“=”运算符。我们先...

    Java方法调用时参数的传递问题

    方法在调用的时候参数是如何传递的呢?其实在调用的时候参数传递给方法,这个过程就是赋值的过程,参数传递和“赋值规则”完全相同,只不过参数传递在代码上看不见“=”运算符。我们先来深入的研究一下“赋值规则”吧!

    public class AssignmentTest {

    public static void main(String[] args) {

    //基本数据类型

    int a = 10;

    int b = a; //a赋值给b,a把什么给了b?

    //引用数据类型

    Bird bird1 = new Bird("polly");

    //bird1赋值给bird2,bird1把什么给了bird2?

    Bird bird2 = bird1;

    }

    }

    class Bird {

    String name;

    public Bird(){}

    public Bird(String _name){

    name = _name;

    }

    }

    在以上程序当中,有两个疑问,第一个:a赋值给b,a把什么给了b?第二个:bird1赋值给bird2,bird1把什么给了bird2?

    其实a,b,bird1,bird2就是4个普通的变量,唯一的区别只是a和b都是基本数据类型的变量,bird1和bird2都是引用数据类型的变量(或者说都是引用),a变量中保存的那个“值”是10,bird1变量中保存的那个“值”是0x8888(java对象内存地址),本质上来说10和0x8888都是“值”,只不过一个“值”是整数数字,另一个“值”是java对象的内存地址,大家不要把内存地址特殊化,它也是一个普通的值。

    那么“赋值”是什么意思呢,顾名思义,赋值就是把“值”赋上去。a赋值给b,本质上不是把a给了b,而是把a变量中保存的“值10”复制了一份给了b。bird1赋值给bird2本质上不是把bird1给了bird2,而是把bird1变量中保存的“值0x8888”复制了一份给了bird2。请看以下内存图的变化:

    154c5f35e6c079ba739d085f57d61425.png

    a1a9191486ddad4b6eeacd79aef0676f.png

    图9-33:赋值原理图

    通过以上内存图我们可以看出“赋值”运算的时候实际上和变量的数据类型无关,无论是基本数据类型还是引用数据类型,一律都是将变量中保存的“值”复制一份,然后将复制的这个“值”赋上去。他们的区别在于,如果是基本数据类型则和堆内存当中的对象无关,如果是引用数据类型由于传递的这个值是java对象的内存地址,所以会导致两个引用指向同一个堆内存中的java对象,通过任何一个引用去访问堆内存当中的对象,此对象内存都会受到影响。我们来验证一下,让a++,a应该变成了11,但是b不会变,让bird1.name = “波利”,然后输出bird2.name的结果肯定也是”波利”,请看代码以及运行结果:

    public class AssignmentTest {

    public static void main(String[] args) {

    //基本数据类型

    int a = 10;

    int b = a; //a赋值给b,a把什么给了b?

    a++;

    System.out.println("a = " + a);

    System.out.println("b = " + b);

    //引用数据类型

    Bird bird1 = new Bird("polly");

    //bird1赋值给bird2,bird1把什么给了bird2?

    Bird bird2 = bird1;

    System.out.println("bird1's name = " + bird1.name);

    System.out.println("bird2's name = " + bird2.name);

    bird1.name = "波利";

    System.out.println("bird1's name = " + bird1.name);

    System.out.println("bird2's name = " + bird2.name);

    }

    }

    class Bird {

    String name;

    public Bird(){}

    public Bird(String _name){

    name = _name;

    }

    }

    运行结果如下图所示:

    deffcccde3c0206396a8cc9228ab9444.png

    图9-34:赋值原理测试

    上面我就提到了,方法调用时参数的传递和赋值运算符的原理完全相同,那么请大家根据以上内容所学,画出以下程序的内存图,以及推算它们的执行结果:

    public class ParameterTransferTest01 {

    public static void main(String[] args) {

    int i = 10;

    add(i);

    System.out.println("main's i = " + i);

    }

    public static void add(int i){

    i++;

    System.out.println("add's i = " + i);

    }

    }

    public class ParameterTransferTest02 {

    public static void main(String[] args) {

    User user = new User(20);

    add(user);

    System.out.println("main's user age = " + user.age);

    }

    public static void add(User user) {

    user.age++;

    System.out.println("add's user age = " + user.age);

    }

    }

    class User{

    int age;

    public User(){}

    public User(int _age){

    age = _age;

    }

    }

    展开全文
  • 有时候我们想调用main方法那个类中的其他方法,这时有两种方式: 方式1,使用static修饰那个方法 public class test { public static void main(String[] args) { int te=2; test(te); } static void test(int ...

    一、Java中main函数调用同类下方法或变量

    有时候我们想调用main方法那个类中的其他方法,这时有两种方式:

    方式1,使用static修饰那个方法

    public class
    test {
        public static void main(String[] args) {
            int te=2;
            test(te);
        }
        static void test(int a){
            System.out.println(a);
        }
    }
    

    方式2,创建一个类的对象,利用这个对象来进行调用

    public class
    test {
        public static void main(String[] args) {
            int te=2;
            test t=new test();
            t.test_func(te);
        }
        void test_func(int a){
            System.out.println(a);
        }
    }
    

    第一种方法不用创建一个新对象的实例,因为在程序载入的时候已经分配了内存空间,而第二种方法通过创建了一个对象的实例分配到了内存空间。

    二、java方法的参数传递

    2.1 数组作为参数的传递

    public class
    test {
        public static void main(String[] args) {
            int[] a=new int[]{0,1};
            test_func(a);
            System.out.println(a[0]);
            System.out.println(a[1]);
        }
        public static void test_func(int[] arr){
            arr[0]=1;
            arr[1]=2;
        }
    }
    

    因为数组是引用变量,传递的参数是数组的地址,因此在调用方法内对数组进行改变会导致原来的数据改变。

    展开全文
  • 我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。 那么对象作为方法参数,又是传递的什么呢? java方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里...

    我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。 那么对象作为方法的参数,又是传递的什么呢? java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int

    于是 自己就按照例子 写了一个,代码如下:

    1、使用类

    public class TestReflex {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    TestMethod tmd = new TestMethod();

    System.out.println(tmd.getInvok("getNeedMethod"));

    }

    }

    2、方法类

    import java.lang.reflect.Method;

    public class TestMethod {

    @SuppressWarnings("unchecked")

    public String getInvok(String methodName){

    TestMethod tmd = new TestMethod();

    Class bean = TestMethod.class;

    String str = new String();

    try {

    Method md = bean.getMethod(methodName, null);

    str = (String) md.invoke(tmd, null);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return str;

    }

    public String getNeedMethod(){

    String  str = "获取到这个方法 测试反射";

    return str;

    }

    }

    3、问题:

    不太理解反射会带来什么好处??

    也不太明白上面这样的方式的好处在那里,不想不明不白的去只知道,而不懂原理

    有人可以解释下?????

    展开全文
  • JAVA调用Python,并传递参数 在日常代码编写中,python语言比较方便,集成到项目时,java可以利用Runtime方法调用python并传递参数,代码如下: 如果调用的java代码比较简单,则可以省略环境路径——python.exe路径...
  • 程序设计语言中,将参数传递方法(或函数)有两种方法。按值传递(call by value)表示方法接受的是调用者提供的值;按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。Java程序设计语言都是采用按...
  • Java方法详解 何谓方法? System,out.println(), 那么他是什么呢 System 他是一个系统的类 out 他是一个对象是System下的一个输出对象 ...println() 他就算是一个方法 .类() 都是Java里面的一些方法 ... //main方法
  • 关注我,每天三分钟,轻松掌握一个Java知识点。Java里方法的参数传递方式...类比到代码中如下:上述代码执行结果:我们可以看到,在调用了swap方法候,main方法中的a、b值并未受到影响,这是为什么呢?因为在main...
  • 如果一个机器上运行着三个Java程序,即有三个Java虚拟机实例Java虚拟机会调用某个初始类的main()方法运行一个Java程序,此方法将会作为程序的初始线程启动,任何线程都是由主线程启动的。守护线程和非守护线程Java...
  • Java方法参数传递机制Java方法中如果声明了形参,在调用方法时就必须给这些形参指定参数值,实际传进去的这个值就叫做实参。这就涉及到Java中的参数传递机制,值传递。基本数据类型基本数据类型,值传递的体现是...
  • 今天在网上看见一篇文章:反射通过参数传递方法调用方法 于是 自己就按照例子 写了一个,代码如下:   1、使用类 public class TestReflex {  public static void main(String[] args) { // TODO Auto-...
  • 补充JNI字符串参数传递与返回调用实例。 二、实例 2.1、编写Java类 public class Sample { public native static String sayHello(String text); public static void main(String[] args) { ...
  • Java方法中如果声明了形参,在调用方法时就必须给这些形参指定参数值,实际传进去的这个值就叫做实参。 这就涉及到Java中的参数传递机制,值传递。 一、基本数据类型 基本数据类型,值传递的体现是数值的传递。 ...
  • 关注我,每天三分钟,轻松掌握一个Java知识点。Java里方法的参数传递方式...类比到代码中如下:上述代码执行结果:我们可以看到,在调用了swap方法候,main方法中的a、b值并未受到影响,这是为什么呢?因为在main...
  • Java方法参数传递

    2021-03-16 11:26:00
    * Java参数传递 * 形参:方法声明时,方法小括号内的参数。 * 实参:调用方法时,实际传入的参数值。 */ public class Test3 { public static void main(String[] args) { //实际参数:实际调用传递给它的...
  • javamain方法有一个字符串数组型的形参args,因为main方法是由系统调用的,程序员向其传递参数的手段也有所不同。下面介绍两种将数据传递给main方法的args形参的方法。 在使用命令行执行java的class文件时: 在...
  • Java方法参数传递

    2020-08-04 10:24:48
    也就是说,方法得到的是参数值的一个拷贝,特别是方法不能修改传递给它的任何参数变量的内容。 例如,以下的调用: public class Test { public int num; public static void main(String[] args) { Test t = ...
  • 传递调用方法进行值传递时,方法内部会产生一个局部变量,在方法内部使用局部变量的值,并不影响传入原来数据的值,包括在使用基本数据类型的包装类。public class Assc{public static void main(String[] args){...
  • 各种语言都涉及到方法调用,一个基本的问题就是:参数是怎么传递的 通常认为有2种方式:按值传递,按引用传递 按值传递指的是,方法内部对参数的赋值,在方法外部对参数无影响;按引用传递则相反。比如 [code...
  • 例1public class ParameterPass {public static void main(String[] args) {int i = 10;add(i);System.out.println("main--->" + i);//10}public static void add(int i){i++;System.out.println("add--->" + ...
  • Main方法是用static修饰的,有2种方法可以调用1....另外举一个用反射机制调用Main方法的例子这个类是被调用的main方法类:Java代码public class Run{public static void main(String[] args){String str...
  • 1.方法参数传递基本类型 /* 对于基本数据类型的参数,形参的改变不影响实参的值。 */ public static demo2_method{ public static void main(String[]args){ int number=100; System.out.println("调用change...
  • 反射调用main方法

    2019-02-10 12:05:16
    通过反射的方式来调用这个main方法时,如何为invoke方法传递参数呢? jdk1.4以后,是把整个数组作为一个参数,按照jdk1.4的语法,是数组中的每个元素对应 一个参数,当把一个字符串数组作为参数传递给invoke方法时...
  • 之前阅读《Head First Java》的时候,记得里面有提到过,Java调用方法传递参数的时候,采用的是pass-by-copy的方法,传递一份内容的拷贝,即传值。举一个最简单的例子: 1 public class Test { 2 public ...
  • Main方法是用static修饰的,有2种方法可以调用1....---------------------------------------------------------另外举一个用反射机制调用Main方法的例子这个类是被调用的main方法类:public class Ru...
  • Java方法参数传递

    2019-07-29 16:16:35
    比如Java中的main方法,public static void main(String[] args),这里面的args就是参数参数在程序语言中分为形式参数和实际参数。 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数...
  • (1)基本类型的参数传递方法内形参的改变不会影响main中实参的改变 (2)引用类型的参数传递方法内形参的改变会影响实参的改变 输出结果: 由输出结果可见基本类型的参数传递并未引起实参的改变,而数组...
  • 2:实参:调用方法时,实际传入的参数的值 3:规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的;将实参的值传递给形参的基本数据类型的变量 public class PassObject{ public static void main...
  • 直到我看了一本叫《JAVA编程的逻辑》的书,里面这样写的: 关于参数传递,简单总结一下,定义函数时声明参数,实际上就是定义变量,只是这些变量的值是未知,调用函数时传递参数,实际上就是给函数中的变量赋值. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 541
精华内容 216
关键字:

java调用main方法传递参数

java 订阅