如何在java 方法中返回两个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java 方法中返回两个值相关的知识,希望对你有一定的参考价值。

java中每个方法的返回值,有且仅有一个,因为方法中一旦使用return语句返回返回值,整个方法就会结束,下面的语句也将不会执行。
java中如果想返回多个值的话,可以采用数组和集合进行存储,然后返回集合或者数组即可。其中数组用来封装基本数据类型的数据,集合用来封装对象数据。可以根据返回值的实际类型来选择容器。
参考技术A 返回值可以定义成数组。

java 线程中的值如何返回

java 线程public void run()中值如何返回

如果是java5的话,那么Java5新增了Callable接口获得线程的返回值,用法如下

package com.ronniewang;  
  
  
import java.util.concurrent.Callable;  
import java.util.concurrent.ExecutionException;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
import java.util.concurrent.Future;  
  
  
public class GetReturnValueFromCallable   
  
  
    private static final int SLEEP_MILLS = 3000;  
  
  
    private static final int SECOND_MILLS = 1000;  
  
  
    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;  
  
  
    ExecutorService executorService = Executors.newCachedThreadPool();  
  
  
    /** 
     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable 
     */  
    public static void main(String[] args)   
  
  
        new GetReturnValueFromCallable().testCallable();  
      
  
  
    private void testCallable()   
  
  
        /** 
         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定, 
         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象 
         */  
        Future<String> future = executorService.submit(new Callable<String>()   
  
  
            public String call() throws Exception   
  
  
                Thread.sleep(SLEEP_MILLS);  
                return "I from callable";  
              
        );  
  
  
        while (true)   
            /** 
             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值, 
             * 如果直接调用get()方法,get()方法将阻塞值线程结束 
             */  
            if (future.isDone())   
                try   
                    System.out.println(future.get());  
                    break;  
                 catch (InterruptedException e)   
                    // ignored  
                 catch (ExecutionException e)   
                    // ignored  
                  
              
            else   
                try   
                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");  
                    Thread.sleep(SECOND_MILLS);  
                 catch (InterruptedException e)   
                    // ignored  
                  
              
          
      
  
package com.ronniewang;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class GetReturnValueFromCallable 


    private static final int SLEEP_MILLS = 3000;


    private static final int SECOND_MILLS = 1000;


    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;


    ExecutorService executorService = Executors.newCachedThreadPool();


    /**
     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable
     */
    public static void main(String[] args) 


        new GetReturnValueFromCallable().testCallable();
    


    private void testCallable() 


        /**
         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定,
         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象
         */
        Future<String> future = executorService.submit(new Callable<String>() 


            public String call() throws Exception 


                Thread.sleep(SLEEP_MILLS);
                return "I from callable";
            
        );


        while (true) 
            /**
             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值,
             * 如果直接调用get()方法,get()方法将阻塞值线程结束
             */
            if (future.isDone()) 
                try 
                    System.out.println(future.get());
                    break;
                 catch (InterruptedException e) 
                    // ignored
                 catch (ExecutionException e) 
                    // ignored
                
            
            else 
                try 
                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");
                    Thread.sleep(SECOND_MILLS);
                 catch (InterruptedException e) 
                    // ignored
                
            
        
    


输出结果:
after 3 seconds, we will get future
 after 2 seconds, we will get future
 after 1 seconds, we will get future
 I from callable
参考技术A 先如一楼所示那样把值改变了,
然后在 run 方法方法中触发一些事件(如启动一个 Timer),再在让事件监听器函数返回那些被操作大的值
参考技术B public class A implements java.lang.Runnable
private Object obj;
//obj将是你要从run()方法返回的参数
public void run()
//操作obj

本回答被提问者采纳
参考技术C 在run()后面写一些get的方法阿。
前面申明一些函数。

以上是关于如何在java 方法中返回两个值的主要内容,如果未能解决你的问题,请参考以下文章

java 如何能在一个方法中返回多个值?

java里如何根据类名(String)返回类

java 如何使程序返回到指定地方

如何以较少的费用从 java 中的方法返回两个值(1.Collection,2.Single Boolean 值)?

java实现一个类返回多个参数

如何在java中检查布尔方法的返回值