java为什么都叫传值?Java参数传递是传值还是传引用
大家好,如果您还对java为什么都叫传值不太了解,没有关系,今天就由本站为大家分享java为什么都叫传值的知识,包括Java参数传递是传值还是传引用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
怎样java中传值给页面
从 servlet转到 jsp不外乎两种方法,重定向和 url转发
1、重定向( Redirect):是路径的跳转,内容和 url都改变。不允许带 request参数( session参数可以),即不允许在 servlet里给 request对象使用setAttribute方法传给下一页面。在 servlet里使用 response.sendRedirect(url)方法。注意这里的 url前不带斜线/,如 response.sendRedirect(”test.jsp“)
2、url转发( Forward):是页面的跳转,页面内容发生改变,url不变。可以带 request和 session参数。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而这里的 url前需要带斜线/,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)
servlet使用RequestDispatcher到jsp页面
String url="/EShop.jsp";
ServletContext sc= getServletContext();
RequestDispatcher rd= sc.getRequestDispatcher(url);
rd.forward(req, res);
servlet重定向jsp,并将数据发送到别一个JSP中:
request.setAttubute("messages",aaa);
RequestDispatcher requestDispatcher=request.getRequestDispatcher("/jsp/testbean.jsp");
requestDispatcher.forward(request,response);
3.7、Servlet跳转
从JSP跳转到Servlet可以实现,通过表单提交或超链接可以做到,但是现在如果从一个Servlet跳转到JSP呢?
• HttpServletResponse对象,此对象可以完成跳转:public void sendRedirect();
JumpServlet.java:
package org.lxh.demo;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class JumpServlet extends HttpServlet{
public void init() throws ServletException{
}
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,java.io.IOException{
resp.sendRedirect("jump.jsp");
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,java.io.IOException{
this.doGet(req,resp);
}
public void destroy(){
}
};
web.xml:
<servlet>
<servlet-name>jump</servlet-name>
<servlet-class>org.lxh.demo.JumpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jump</servlet-name>
<url-pattern>/jump</url-pattern>
</servlet-mapping>
以上实现了跳转的功能,但是跳转之后,发现地址栏已经改变了,所以此跳转称为客户端跳转。如果此时假设一个Servlet要向JSP中传递属性,那么应该使用session范围。
JumpServlet.java:
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,java.io.IOException{
request.getSession().setAttribute("name","hello");
resp.sendRedirect("jump.jsp");
}
jump.jsp:
<h1><%=session.getAttribute("name")%></h1>
此时,发现可以通过session属性范围传递内容,但是如果现在传递的内容很多,而程序中使用session范围的话则肯定会带来额外的性能降低,但是此时,这些值只使用一次显示,那肯定没有必要使用session对象,最好使用request范围。如果request属性范围也有一个限制,必须是服务器端跳转,在JSP中使用<jsp:forward>语句完成,但是在servlet中呢?就只能使用RequestDsipatcher接口完成,实际上<jsp:forward>语句也是使用包装了此种应用,既然RequestDispatcher是一个接口,所以必须通过其他方式实例化,通过request对象完成。
JumpServlet.java:
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,java.io.IOException{
req.setAttribute("name","hello");
//准备跳转到此页面
RequestDispatcher rd= req.getRequestDispatcher("jump.jsp");
//把所有的请求向下继续传递
rd.forward(req,resp);
}
注意:
当需要传递request属性范围的时候才使用服务器端跳转。如果不需要传递,则可以选择任意的跳转方式。
但是一般情况下都使用RequestDispatcher进行跳转,而且一定要记住的时候,跳转之后页面地址不会有任何的变化。
如何区分Java中的值传递和引用传递(急)
值传递(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
Java中的形参和实参的区别以及传值调用和传
1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。
2.实参:传递给被调用方法的值,预先创建并赋予确定值。
3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。
4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。
案例分析:
1.基础数据类型(传值调用)
传值,方法不会改变实参的值。
2.引用数据类型(引用调用)
传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。
举两个例子:
(1)方法体内改变形参引用,但不会改变实参引用,实参值不变。
publicclassTestFun2{
publicstaticvoidtestStr(Stringstr){
str="hello";//型参指向字符串“hello”
}
publicstaticvoidmain(String[]args){
Strings="1";
TestFun2.testStr(s);
System.out.println("s="+s);//实参s引用没变,值也不变
}
}
执行结果打印:s=1
(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。
publicclassTestFun4{
publicstaticvoidtestStringBuffer(StringBuffersb){
sb.append("java");//改变了实参的内容
}
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer("my");
newTestFun4().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//内容变化了
}
}
执行结果,打印:sb=my java。
所以比较参数是String和StringBuffer的两个例子就会理解什么是“改变实参对象内容”了。
1.java的基本数据类型是传值调用,对象引用类型是传引用。
2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。
3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。
Java参数传递是传值还是传引用
您好:
Java中参数的传递方式有两种:传值和传引用。按值传递(call by value)表示方法接受的是调用者提供的值;按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。
传值,参数为基本类型时,是采用传值的方式,示例如下:
传引用,一般参数为对象类型,示例如下:
以上,希望对你有帮助!
好了,关于java为什么都叫传值和Java参数传递是传值还是传引用的问题到这里结束啦,希望可以解决您的问题哈!