java中的变量的作用域问题

新人初学java,在变量的作用域这里卡了下
我知道全局变量和局部变量,但是如果我在main的开头就申明了一个变量,那这个变量应该是全局变量吧,下面所有的方法都可以调用这些变量,但是如果我在main函数中间申明了一个变量,那这个变量算什么?还算是全局变量吗?是不是只有后面的方法才能使用它,而在他之前的就不能用?
还有一个问题:
File tmp;
while(!list.isempty()){
tmp = (File)list.removeFirst
.....
}
这段语句在while语句外面先是定义了一个对象天麻片,但是却在while语句中才分配空间,那是不是可以理解为这个tmp是一个list列表里第一个元素的引用,要对这第一元素操作的话,是不是直接操作tmp就可以了?
在下先谢谢各位了

5个回答

tmp 只是list底层元素的一个引用,操作tmp不会改变底层元素的。你那代码只是取出了list 的首元素

u010775468
键盘手C 哦哦,那就是说第二种的定义就是指的是一个引用了?e指向tmp这个变量?
接近 4 年之前 回复
qq_30715329
QLiuQ 回复键盘手C: File tmp=e ; 可以这么理解的
接近 4 年之前 回复
u010775468
键盘手C 谢谢,只是有个地方总是搞不懂,File e = new File(), File e = tmp;这两条语句第一个是不是实例化一个对象,而第二个则是一个引用,相当于一个指针(java中无指针)是不是可以这样理解
接近 4 年之前 回复

main的开头是什么意思,是main方法的上一行,还是main方法内,如果是上一行,那么如果是static的,那么可以算作“全局变量”,否则是成员变量。写在main里面,无论最上面还是哪里,都是成员变量。

java和C++不同,成员变量不需要先申明后使用,所以你可以在作用域可见的范围内,不管前面后面都可以访问。
不过作为局部变量,必须先定义后使用
i = 1;
int i;
这是不行的。

caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复键盘手C: 是
接近 4 年之前 回复
u010775468
键盘手C 哦哦,谢谢,就是相当于是是说我在第三行定义了,那么只有在第三行以后任意行才可以使用吗
接近 4 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复键盘手C: 不行
接近 4 年之前 回复
u010775468
键盘手C 谢谢,那么这个写在main内部的,作为一个成员变量的话,是不是如果我在第三行定义了,相当于即使我在第一行仍然可以调用?
接近 4 年之前 回复
u010775468
键盘手C 谢谢,那么这个写在main内部的,作为一个成员变量的话,是不是如果我在第三行定义了,相当于即使我在第一行仍然可以调用?
接近 4 年之前 回复

定义在类中,属于全局变量,定义在方法中属于局部变量。全局变量 在整个类中都可以调用,而局部变量只能在方法里调用,如果想要调用,需要传出去。

成员变量和局部变量的区别?
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
等等在我博文中有详细解释

                    我在写java零基础入门的博客文章,每一篇都有代码案例进行理解,有的还配上内存图解释。有关于成员变量和全局变量的问题详细讲解,而且后后边也会有专题的形式讲解这个问题的。您可以关注看一下,一起讨论。当然其他看到的同行也可以进行参考讨论,我的博客地址:http://blog.csdn.net/qq_32059827
qq_32059827
杨道龙 不客气,您可以进我得博文一起进行探讨,和大家一块讨论。
接近 4 年之前 回复
u010775468
键盘手C 谢谢,我回去好好学习学习的
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java中关于变量的作用域的问题
在java中局部变量,实例变量,类变量的作用域都分别是什么呢?
java栈中变量的作用域与内存回收问题上的一点小疑问?
一个类的实例方法 public void test(){ //dosomethings ... for(int i=0;i<100;i++){ //dosomethings ... } //dosomethings..... } 这段方法在执行时,变量i的作用域在for循环块中,当出了for循环块以外,变量i失效。但是我想问一下,当出了for循环块以后,变量i的所在内存是否会被回收。也就是说是否在此test方法的栈帧出栈之前被回收?
jvm中的局部变量表中的Slot中的作用是什么?
> 原文地址:http://www.tuicool.com/articles/URZrMnb > 局部变量表中的Slot是可重用的,方法体中定义的变量,其作用域并不一定会覆盖整个方法,如果当前字节码PC计算器的值已经超出了某个变量的作用域,那么这个变量对应的Slot就可以交给其它变量使用。 求大神解释下,上面的这句话,最好举个实例。
java基础中作用域问题
public class NestVar { public static void main(String[] args) { int count; for (count = 0; count < 10; count = count + 1) { System.out.println("This is count:" + count); for (count = 0; count < 2; count++){ System.out.println("This is count:" + count); System.out.println("This program is in error!!!"); } } } } 这段代码的输出结果是: This is count:0 This is count:0 This program is in error!!! This is count:1 This program is in error!!! This is count:3 // 为什么会是3呢 This is count:0 // 为什么会初始化变量 This program is in error!!! This is count:1 This program is in error!!! This is count:3 This is count:0 This program is in error!!! This is count:1 This program is in error!!! This is count:3 This is count:0 This program is in error!!! This is count:1 This program is in error!!! This is count:3 This is count:0 This program is in error!!! This is count:1 This program is in error!!! This is count:3 ......(死循环) 请大神不吝赐教!最好解释的详细点。新人没有币。
java变量作用域完了是不是就可以垃圾回收
public class ReferenceTest { public static void main(String[] args) throws InterruptedException { WeakHashMap<String, String> ws = new WeakHashMap<String, String>(); // { // String lu = new String("sb"); // ws.put(lu, "Afka Liu"); // } initHash(ws); System.gc(); System.out.println(ws.get("sb")); } public static void initHash(WeakHashMap<String, String> ws) { String lu = new String("sb"); ws.put(lu, "Afka Liu"); } } 打印出来的值是 null public class ReferenceTest { public static void main(String[] args) throws InterruptedException { WeakHashMap<String, String> ws = new WeakHashMap<String, String>(); { String lu = new String("sb"); ws.put(lu, "Afka Liu"); } // initHash(ws); System.gc(); System.out.println(ws.get("sb")); } public static void initHash(WeakHashMap<String, String> ws) { String lu = new String("sb"); ws.put(lu, "Afka Liu"); } } 打印出来的值是Afka Liu 这个例子先new了一个String,这样就没有常量池的引用指向这个new出来的String对象,然后将它put到WeekHashMap中,如果没有lu的强引用,WeekHashMap中get出来的就应该是null。但是第二种方法get出来的不是null,但是lu已经出了作用域,生命周期也已经结束。第一种和第二种在垃圾回收上有什么区别? [b]问题补充:[/b] 你说的我清楚,我也只是建议回收,可是在我的eclipse里跑了几十次都是我提问的结果,如果能得到您给的结果,那就没有什么问题了.
Java中如果一个类引用另外一个类中的方法,我在其中一个类中定义的静态变量,在另外一个类中有效吗?
比如图中这么写报错 ,然后我删掉345行的static 程序就能跑起来了,静态变量的作用域是整个类,为什么我不能在两个类中定义两组静态变量?,![图片说明](https://img-ask.csdn.net/upload/201611/13/1479050196_279851.jpg)
关于Java语言for循环内外变量定义的问题
今天被TeamLeader批了一顿,本来想和他争论争论的,后来感觉自己也不清楚,遂只有来Iteye讨教讨教了。 这是个关于在for循环内外变量定义的问题,先看代码: [code="java"] public class Test2 { public static void main(String[] args) { // 放入10000000的元素 List<Object> list = new ArrayList<Object>(10000000); for(int i = 0; i < 10000000; i++) { list.add(i, new Object()); } // 做10次循环,求均值 for(int j = 0; j < 10; j++) { // 变量在循环内定义 long t1 = System.currentTimeMillis(); for(Iterator<Object> iterator = list.iterator(); iterator.hasNext();) { Object object = iterator.next(); } long t2 = System.currentTimeMillis(); System.out.println("循环内" + (j + 1) + "次, 时间:" + (t2 - t1) + ";"); // 变量在循环外定义 t1 = System.currentTimeMillis(); Object object = null; for(Iterator<Object> iterator = list.iterator(); iterator.hasNext();) { object = iterator.next(); } t2 = System.currentTimeMillis(); System.out.println("循环外" + (j + 1) + "次, 时间:" + (t2 - t1) + ";"); } } } /*其中一次的运行结果 * * 变量在循环内定义 变量在循环外定义 *1次循环 359 359 *2次循环 360 343 *3次循环 344 360 *4次循环 359 359 *5次循环 344 359 *6次循环 360 359 *7次循环 360 359 *8次循环 344 359 *9次循环 344 359 *10次循环 344 359 */ [/code] 我在工作中有一段代码是放到循环内定义的,主要是习惯,以及变量最小作用域的理念。但teamleader告诉我要放到循环外面,放在里面性能不好,不太理解。这个问题发生后,我也在网络寻找答案,但结果差不多一半一半,有建议在内部定义,也有建议在外部定义,所以就更糊涂了...我现在所知道的有:在内部定义,满足变量最小作用域的理念,循环外没有使用这个变量,该变量就不会在循环外定义;但teamleader说在内部定义会多次申请栈内存,影响性能,但我写了上面的例子和查了下资料,也没有弄太清这里面是如何影响性能的,请帮助详细讲解下两种定义方式的好坏,及其原因,和jdk版本是否有关系。
c++ 和 java不一样的地方
![图片说明](https://img-ask.csdn.net/upload/201908/29/1567060189_412953.png) 像图片所示,先在循环外声明i变量,再在for循环里声明的局部变量i会把原来的i覆盖掉。运行结果![图片说明](https://img-ask.csdn.net/upload/201908/29/1567060282_861822.png) 然后在java里面这样的声明变量是不允许的。![图片说明](https://img-ask.csdn.net/upload/201908/29/1567060548_695547.png) 好像是因为作用域的问题,for循环的()里声明的变量是在花括号外的,所以会造成同个作用域有两个相同变量的问题。 那么为什么C++可以呢。
java中的几个存储机制
新人初学java,有几个问题一直搞不懂,所以求教各位,感激不尽 1.关于堆栈和堆得问题,现在有这样一种说法,说是变量的存储机制是根据他的作用域决定的,一个方法里定义的变量,则这个变量在这个方法结束后,就会被销毁,所以他的存储的生命期是定好的,所以会存到栈里(堆栈),然后如果是定义的全局变量,是放在堆里的,但是我又看到书上说一般基本数据类型(byte,short,int long,float,double,char)这些是存放在栈里的,而引用数据类型,数组,对象(new过得,分配过内存的),是存放在堆里的,这里我就不懂了,如果我在一个类的方法里定义了另一个类的对象,那这个对象到底是存放在栈里呢,还是堆里呢?有点糊涂,还有String这个类,他好像作为一个数据类型(String a = "xxxx")这种形式,是存放在常量池里,而(String a = new String)这种形式好像是存放在堆内存里,对于这个常量池的概念我不是很懂,还望各位解答,(好像finall,static定义的是放在这里的),还有一种说法,说是存放在堆里的数据,在栈里都有一个引用(地址)是指向这个堆内存的,不知道这么理解对不对.
(急~~~!)EL表达式怎么取动态作用域变量
一个action文件: [code="java"] package com.struts; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForward; import org.apache.struts.action.Action; import java.util.*; import com.dao.*; import com.bean.*; public class detailsAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { detailsForm detailsForm = (detailsForm) form; String type = request.getParameter("type");//执行类型 String id = request.getParameter("infoid");//取得的参数变化 String typediv = "";//根据这个值确定一个页面显示的内容 if (type.equals("indexnotice")) {//显示所点击的公告信息 //调用方法返回结果List List notPGroups = DAO_ParentGroups.doSelectParentGroups (" and Pg_Topic=(select Ct_Id from Topic where Ct_Name='产品中心')"); List notInfo = DAO_DetailsInfo.doSelectDetailsInfo(" and di_Id=" + id);//显示点击的产品详细信息 for (int i=0; i<notPGroups.size(); i++){ int j = i + 1; Vo_ParentGroups pgroups = (Vo_ParentGroups)notPGroups.get(i);//类型转换为一个数据Bean类 int diId = pgroups.getPgId();//取得Bean的一个编号 List subGroups = DAO_Groups.doSelectGroups(" and Cg_Parent=" + diId);//根据Id查找 request.setAttribute("subgroups"+j,subGroups);//动态的设置作用域 } request.setAttribute("notgroupslist",notPGroups); request.setAttribute("notinfo",notInfo); typediv = "indextopic"; } if (type.equals("indexsovle")) {//显示所点击的解决方案 typediv = "indexsovle"; } if (type.equals("indexnews")) {//显示所点击的新闻信息 typediv = "indexnews"; } if (type.equals("indexproduct")) {//显示所点击的产品信息 typediv = "indexproduct"; } if (type.equals("indexsuccase")) {//显示所点击的成功案例 typediv = "indexsuccase"; } request.setAttribute("typediv",typediv); return mapping.findForward("topic"); } } [/code] 一个JSP文件: [code="html"] <%@ page contentType="text/html; charset=GB2312" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <table> <tr> <td width='205' height="500" valign="top" background="image/index_bg.jpg"> <P style="MARGIN-TOP: -5px; MARGIN-BOTTOM: 6px; WORD-SPACING: 0px; LINE-HEIGHT: 150%" align=center>&nbsp;</P> <div id="PARENT"> <ul id="nav"> <c:choose> <c:when test="${requestScope.notgroupslist!=null}"> <c:forEach var="parentgroups" items="${requestScope.notgroupslist}" varStatus="gnum"> <li> <a href="#" onclick="DoMenu('ChildMenu1')"> <font class="fontcolor">${parentgroups.pgName}</font> </a> <!--在这里怎么取得action动态设置的作用域--> <c:if test="${requestScope.subgroups[gnum.count]!=null}"> <ul id="ChildMenu1" class="collapsed"> <c:forEach var="subgroups" items="${requestScope.subgroups[gnum.count]}"> <li> <a href="#" target="_blank"> <font class="fontcolor">${gnum.count}</font> </a> </li> </c:forEach> </ul> </c:if> </li> </c:forEach> </c:when> <c:otherwise> 暂无分类! </c:otherwise> </c:choose> </ul> </div> <P style="MARGIN-TOP: -5px; MARGIN-BOTTOM: 6px; WORD-SPACING: 0px; LINE-HEIGHT: 150%" align=center>&nbsp;</P> </td> </tr> </table> [/code] 请教各位大侠~!在JSP中怎么取得在action中动态设置的request作用域变量~!急啊~!
基于springmvc+mybatis的登录表单提交后404
前端填写正确的用户名和密码后,提交登录,浏览器显示404,前端提交的地址是/userlogin,后端对接的/user/userlogin也是对的,浏览器f12里显示请求的确成功传给了后端,但是不知道为什么404。用的是tomcat8.5,java版本1.8,phpstudy最新版,mysql5.7.26。 ## 这是所用到的包: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580567617_880785.jpg) ## 这是目录结构: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580567511_223692.jpg) ## 这是web.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>springmvc_test</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 加载spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/context-config.xml</param-value> </context-param> <!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- DispatcherServlet在初始化方法里面会读取该初始化参数的值来获得 spring配置文件的位置 ,然后启动spring容器。 --> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置字符编码 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ``` ## 这是context-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描service包下的注解 --> <context:component-scan base-package="com.test.service"></context:component-scan> <!-- 配置数据库 --> <!-- 加载配置文件 --> <!-- <context:property-placeholder location="classpath:jdbc.properties"/> --> <bean id="dateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/Eday_Test"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </bean> <!-- 配置Sqlsessionfactory并将数据源注入 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引入数据源 --> <property name="dateSource" ref="dateSource"></property> <!-- 载入mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 载入配置mapper映射的xml --> <property name="mapperLocations" value="classpath:com/test/mapper/*.xml"></property> </bean> <!-- 配置扫描mapper接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackge" value="com.test.mapper"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dateSource" ref="dateSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans> ``` ## 这是mybatis-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <!-- 配置别名 --> <typeAlias alias="User" type="com.test.pojo.User"/> </typeAliases> </configuration> ``` ## 这是springmvc-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 扫描controller包下的注解 --> <context:component-scan base-package="com.test.controller"></context:component-scan> <!-- 开启注解 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 静态资源访问 --> <mvc:default-servlet-handler/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置试图解析的默认路径,即配置页面的根路径 --> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans> ``` ## 这是UserController.java: ```java package com.test.controller; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.test.pojo.User; import com.test.service.UserService; //声明控制器 @Controller //设置bean的scope属性为多例(prototype) @Scope("prototype") //设置请求映射,当客户端请求/user时,转到该控制器处理 @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value="/userlogin") public ModelAndView login(String user_Name,String user_pwd,ModelAndView mv,HttpSession session){ //调用userService中的login方法处理user实体类对象 User user = userService.login(user_Name,user_pwd); //登录的逻辑判断,判断条件是返回结果不为空 if(user!=null){ //登陆成功,将user对象设置到HttpSession作用范围域中,相当于服务端的cookie,有效时间默认30分钟 //在程序运行期间,在任意页面都可以提取它的值。 session.setAttribute("user",user); //转发到main请求 //登录成功,跳转页面 mv.setViewName("login/login-success"); }else{ //登录失败,向前端传递失败信息 mv.addObject("message","用户名或密码错误,请重新输入!"); //登录失败,跳转到登录页面 mv.setViewName("login"); } return mv; } //跳转到用户注册界面 @RequestMapping(value="/userregister"/*,method=RequestMethod.POST*/) public String register(User user){ String user_Name = user.getUser_Name(); //如果数据库中没有该用户,可以注册,否则跳转页面 if(userService.findByUserName(user_Name)==null){ //添加用户 userService.register(user); //注册成功,跳转到主页面 return "index"; }else{ //注册失败,跳转到错误页面 return "error"; } } } ``` ## 这是UserMapper.java: ```java package com.test.mapper; import org.apache.ibatis.annotations.Param; import com.test.pojo.User; public interface UserMapper { //根据用户名和密码查找,mybatis中有多个参数时,需要使用@Param注解 User findByUserNameAndPassword(@Param("user_Name")String user_Name,@Param("user_Pwd")String user_Pwd); //增加用户 void addUser(User user); //根据用户名查询 User findByUserName(String user_Name); } ``` ## 这是UserMapper.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.tes.mapper.UserMapper"> <!-- 根据用户名和密码查询 --> <select id="findByUserNameAndPasssword" resultType="User"> select * from user where user_Name=#{user_Name} and user_Pwd=#{user_Pwd} </select> <!-- 增加用户 --> <insert id="addUser" parameterType="User"> insert into user (user_Name,user_Pwd,user_Email,user_NickName,user_Birth,user_Phone,user_InvitationCode) values(#{user_Name},#{user_Pwd},#{user_Email},#{user_NickName},#{user_Birth},#{user_Phone},#{user_InvitationCode}) </insert> <!-- 根据用户名查询 --> <select id="findByUserName" resultType="User"> select * from user where user_Name=#{user_Name} </select> </mapper> ``` ## 这是User.java: ```java package com.test.pojo; import java.sql.Timestamp; public class User { private int user_Id; private String user_Name; private int user_Pwd; private String user_Email; private String user_NickName; private Timestamp user_Time; private String user_Birth; private int user_Fans; private int user_Follow; private int user_Score; private String user_HeadImgAddr; private int user_Phone; private String user_InvitationCode; public int getUser_Id() { return user_Id; } public void setUser_Id(int user_Id) { this.user_Id = user_Id; } public String getUser_Name() { return user_Name; } public void setUser_Name(String user_Name) { this.user_Name = user_Name; } public int getUser_Pwd() { return user_Pwd; } public void setUser_Pwd(int user_Pwd) { this.user_Pwd = user_Pwd; } public String getUser_Email() { return user_Email; } public void setUser_Email(String user_Email) { this.user_Email = user_Email; } public String getUser_NickName() { return user_NickName; } public void setUser_NickName(String user_NickName) { this.user_NickName = user_NickName; } public Timestamp getUser_Time() { return user_Time; } public void setUser_Time(Timestamp user_Time) { this.user_Time = user_Time; } public String getUser_Birth() { return user_Birth; } public void setUser_Birth(String user_Birth) { this.user_Birth = user_Birth; } public int getUser_Fans() { return user_Fans; } public void setUser_Fans(int user_Fans) { this.user_Fans = user_Fans; } public int getUser_Follow() { return user_Follow; } public void setUser_Follow(int user_Follow) { this.user_Follow = user_Follow; } public int getUser_Score() { return user_Score; } public void setUser_Score(int user_Score) { this.user_Score = user_Score; } public String getUser_HeadImgAddr() { return user_HeadImgAddr; } public void setUser_HeadImgAddr(String user_HeadImgAddr) { this.user_HeadImgAddr = user_HeadImgAddr; } public int getUser_Phone() { return user_Phone; } public void setUser_Phone(int user_Phone) { this.user_Phone = user_Phone; } public String getUser_InvitationCode() { return user_InvitationCode; } public void setUser_InvitationCode(String user_InvitationCode) { this.user_InvitationCode = user_InvitationCode; } @Override public String toString() { return "User [user_Id=" + user_Id + ", user_Name=" + user_Name + ", user_Pwd=" + user_Pwd + ", user_Email=" + user_Email + ", user_NickName=" + user_NickName + ", user_Time=" + user_Time + ", user_Birth=" + user_Birth + ", user_Fans=" + user_Fans + ", user_Follow=" + user_Follow + ", user_Score=" + user_Score + ", user_HeadImgAddr=" + user_HeadImgAddr + ", user_Phone=" + user_Phone + ", user_InvitationCode=" + user_InvitationCode + "]"; } } ``` ## 这是UserService.java: ```java package com.test.service; import com.test.pojo.User; public interface UserService { //通过用户名及密码核查用户登录 User login(String user_Name,String user_Pwd); //增加用户 void register(User user); //根据用户名查询 User findByUserName(String user); } ``` ## 这是UserServiceImpl.java: ```java package com.test.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.test.mapper.UserMapper; import com.test.pojo.User; import com.test.service.UserService; @Service @Transactional public class UserServiceImpl implements UserService { //注入UserMapper接口 @Autowired private UserMapper userMapper; //登录,根据用户名和密码进行查询 @Override public User login(String user_Name,String user_Pwd){ return userMapper.findByUserNameAndPassword(user_Name,user_Pwd); } //注册,增加用户 @Override public void register(User user){ userMapper.addUser(user); } //根据用户名查询 @Override public User findByUserName(String user_Name){ return userMapper.findByUserName(user_Name); } } ``` ##这是login.jsp ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../css/login.css" /> <title>登录</title> </head> <body> <!--导航栏--> <nav class="nav"> <ul> <li class="logo"><a href="#">Eday</a></li> <li class="shouye"><a href="../index.jsp" class="neirong">首页</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">文章列表</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">留言板</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">更新日志</a></li> </ul> </nav> <!--登录板块--> <header class="header"> <p class="logintitle"> <b>登录</b> </p> <form action="${pageContext.request.contextPath }/user/userlogin" method="post" class=login-form> <p class= login-username-p> <label for="username" class="login-username-text">用户名:</label> <input type=text name="user_Name" class="login-username-input"> <br><a href="register.jsp" class=login-register>注册</a> </p> <p class="login-psw-p"> <label for="psw" class="login-psw-text">密码:</label> <input type=password name="user_Pwd" class="login-psw-input"> <br><a href="#" class=login-forget>忘记密码</a> </p> <div class=login-button-div> <label for=button></label> <button type=sublim class=login-button>登录</button> </div> </form> </header> </body> </html> ``` ## 这是login-success.jsp: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录成功,请等待跳转...</title> <script type="text/javascript"> onload=function(){ setInterval(go, 1000); }; var x=3; //利用了全局变量来执行 function go(){ x--; if(x>0){ document.getElementById("sp").innerHTML=x; //每次设置的x的值都不一样了。 }else{ location.href='../index.jsp'; } } </script> </head> <body> <!--导航栏--> <nav class="nav"> <ul> <li class="logo"><a href="#">Eday</a></li> <li class="shouye"><a href="../index.jsp" class="neirong">首页</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">文章列表</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">留言板</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">更新日志</a></li> </ul> </nav> <header> <div> <p>登录成功!页面将在3秒后自动跳转,请稍等...</p> </div> </header> </body> </html> ``` ## 这是数据库: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580568589_694404.jpg)
做了一个小时的面试题(没有过 希望大家帮忙答下 虽然很幼稚 毕竟每个人都是这么过来的吗 感激了!)
XX软件工程师笔试试题 注:1、请参考人员将答案写在答题纸上,勿将答案写在此卷上。 2、请参考人员将编号与姓名填写在答题纸上。 1、 以下数据结构中不属于线性数据结构的是()。 A、队列 B、线性表 C、二叉树 D、栈 我的答案:C 2、 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()。 A、 可行性分析 B、需求分析 C、详细设计 D、程序编码 我的答案:B 3、 结构化程序设计主要强调的是()。 A、 程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性 我的答案:C 4、 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段()。 A、 概要设计 B、详细设计 C、可行性分析 D、需求分析 我的答案:B 5、 下列关于栈的叙述中正确的是()。 A、 在栈中只能插入数据 B、在栈中只能删除数据 B、 栈是先进先出的线性表 D、栈是先进后出的线性表 我的答案:D 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N/2 我的答案:C 8、 视图设计一般有3种设计次序,下列不属于视图设计的是()。 A、 自顶向下 B、由外向内 C、由内向外 D、自底向上 我的答案:C 9、下列有关数据库的描述,正确的是()。 A、数据库是一个DBF文件 B、数据库是一个关系 C、数据库是一个结构化的数据集合 D、数据库是一组文件 我的答案:C 10、下列说法中,不属于数据模型所描述的内容的是()。 A、数据结构 B、数据操作 C、数据查询 D、数据约束 我的答案:A 11、若按功能划分,软件测试的方法通常分为白盒测试方法和(黑盒测试方法)。 12、数据库系统的三级模式分别为(级联)模式、内部级模式与外部级模式。 13、在最坏情况下,冒泡排序的时间复杂度为(N+1/2)。 14、在面向对象方法中,信息隐蔽是通过对象的(封装)性来实现的。 15、关系模型的数据操纵既是建立在关系上的数据操纵,一般有(插入)、增加、删除、和修改四种操作。 16、TIME()的返回值的数据类型是(String)类型。 17、编写SQL语句 1)、创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 我的答案: create table student( studentCardNo number(2) primary key, name char(10), age number(2), sex char(2) check(sex in (‘男’,’女’)), address varchar2(100), tel number(2) ) 2)、修改学生表的结构,添加一列信息,学历 我的答案: alter table student add(xueli varchar2(20)); 3)、修改学生表的结构,删除一列信息,家庭住址 我的答案: alter table student drop column address; 4)、向学生表添加如下信息: 学号 姓名 年龄 性别 联系电话 学历 1 A 22 男 123456 小学 2 B 21 男 119 中学 3 C 23 男 110 高中 4 D 18 女 114 大学 我的答案: insert into student values(‘&1’,’&2’,’&3’); 一次一次添加 5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” 我的答案: update student set xueli=”大专” where tel like 11%; 6)删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 我的答案: delete student where name like C% or sex=”男”; 7)查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号显示出来 我的答案: select name,studentCardNo from student where age<22 and xueli=”大专”; 8)查询学生表的数据,查询所有信息,列出前25%的记录 我的答案: select top*0.25 from student; 9)查询出所有学生的姓名,性别,年龄降序排列 我的答案: select name,sex,age from student where age desc; 10)按照性别分组查询所有的平均年龄 我的答案: select avg(age) from student group by sex; 18、什么是存储过程?为什么存储过程要比单纯的SQL语句执行起来要快? 我的答案: 存储过程算是一种优化查询需要比单存SQL语句执行的要快 19、两张关联表,删除主表中已经在副表中没有的信息 我的答案 delete from fubiao a where a.fid not in(select id from zhubiao) 20、程序题: 用1、2、2、3、4、5这六个数字,用java或你熟悉的语言,打印出所有不同的排列,如:512234、412345等,要求:“4”不能再第三位,“3”与“5”不能相连。并将这些数据按从小到大输出。 我的答案 我的写的不好 没贴下 笔试的时候没写全 21、String 和 StringBuffer的区别 我的答案 String定长 StringBuffer 变长 22、&和&&的区别 我的答案 &短路与 &&逻辑与 网上答案: & 是位运算符,表示按位与运算, && 是逻辑运算符,表示逻辑与(and)。 23、final,finally,finalize的区别 我的答案 Final静变量关键字,finally异常关键字,finalize 网上答案 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 24、数组有没有length()这个方法?String有没有length()这个方法? 我的答案: 数组没有length()这个方法,有length的属性。 String有length()这个方法。 25、是否可以继承String类? 我的答案: 不可以 解释的很乱 26、说出数据连接池的工作机制是什么? 我的答案: 反正解释的很乱我感觉 27、垃圾回收的优点和原理。并考虑2种回收机制。 我的答案: 动态回收 解释的很乱 网上答案: Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解, 它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念, 只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有 使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 28、你所知道的集合类都有哪些?区别?主要方法? 我的答案: Arraylist 非线性的、Vertor线性的 29、JSP的内置对象及方法。 我的答案: Page,exception,out,page content,application,request,reponse,session,config 30、页面间对象传递的方法。 我的答案: 那几个方法都写错了 31、你知道Request对象的主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我的答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 33、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种(例如GBK编码类型)编码的字符串? Request encording(“GBK”) 34、j2ee常用的设计模式?说明工厂模式。 Gof23种设计模式 工厂模式:Factory 网上答案: Java中的23种设计模式: Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。 当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 35、JSP四种会话跟踪技术 我的答案: Application cookie session 36、排序都有哪几种方法?请举例 冒泡 选择 快序 二分查找 网上答案: 排序的方法有:插入排序(直接插入排序、希尔排序), 交换排序(冒泡排序、快速排序), 选择排序(直接选择排序、堆排序), 归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。 //使用快速排序方法对a[ 0 :n- 1 ]排序 从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点 把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 递归地使用快速排序方法对left 进行排序 递归地使用快速排序方法对right 进行排序 所得结果为l e f t + m i d d l e + r i g h t 37、关于模块间的设计原则? 规范要一样 38、项目过程一般是怎样的?你参加过几个项目开发?参加过的项目流程是怎样的?自己负责与人合作工作内容及自我评价? 从需求调研——设计开发——实施 参加过网站的实施 模板的制作 39、tomcat自动关闭常见原因? 我的答案: 现在没遇到过 40、如何设置TOMCAT内存和连接数? 我的答案: Tomcat群集 41、你如何理解Tomcat是什么? 我的答案: Tomcat是JSP Servlet 容器恰当的说 42、静态变量和实例变量的区别? 我的答案: 静态变量域用final修饰,每次都被调用 实例变量则不会 43、IE、FF下面CSS的解释区别 我的答案: 自己编的 44、web前端技术你了解哪些技术? 我的答案: JAVAScript,CSS,DIV,Ajax,Ajax框架,DWR,dojo,jguery 45、什么是报表?什么是报表控件,作用是什么?你了解哪些报表工具? 我的答案: 解释的很乱 46、你了解的那些统计图表类型? 我的答案: 自己编的 47、Flex与数据库连接的三种方式? 我的答案: 自己编的 ------------------------------------------------------- 我答错的、 错在哪里? 没答上的帮忙解答下? 感激了 !
关于java和c++递归调用的问题。。。
我的问题是计算围棋气数的。在C++上正常运行。移植到java后出现异常。只有部分值正确。显然是在递归上出了问题。 这个问题比http://bbs.csdn.net/topics/390162210 的要更为复杂。链接的内容只是简单的递归。 但是感觉上道理是差不多的。 个人感觉是递归调用中变量的作用域问题。得到的结果也很奇怪。代码和情况如下 C++: #include <ctime> #include<iostream> #include<iomanip> using namespace std; int i, j, a[19][19], b[19][19]; void Srand(); int S(int i, int j); int main() { Srand(); cout<<endl; for (i = 0; i<19; i++) { for (j = 0; j<19; j++) { b[i][j] = 1; }}; cout<<endl; int E[19][19]; for (int I = 0; I<19; I++) {cout<<" "; for (int J = 0; J<19; J++) { E[i][j]=S(I,J); cout<<setw(2)<<E[i][j]; for (i = 0; i<19; i++) { for (j = 0; j<19; j++) { b[i][j] = 1;}} }cout<<endl; }; return 0; } //Srand()随机生成+展示 void Srand() {// a[2][5]=-1;a[2][4]=1;a[3][3]=1;a[3][5]=1;a[5][3]=1;a[3][7]=1;a[3][9]=1; a[3][4]=1;a[4][3]=-1;a[6][3]=-1;a[3][6]=-1;a[3][8]=-1; cout << " "; for (j = 0; j<19; j++) { cout << setw(2) << j; } cout << endl; srand((int)time(NULL)); for (i = 0; i<19; i++) { cout << setw(2) << i; for (j = 0; j<19; j++) { // a[i][j] = rand() % 3 - 1; if (a[i][j] == 0) { cout << " "; } else if (a[i][j] == -1) { cout << "●"; }//等于-1输出实心圆圈 else if (a[i][j] == 1) { cout << "○"; }//等于1,输出空心圆圈 } cout << setw(2) << i << endl; }cout << " "; for (j = 0; j<19; j++) { cout << left << setw(2) << j; } }; //判断(i,j)的气数,可累加(递归) int S(int i, int j) { int Co = 0; if ((a[i][j] == 1) || (a[i][j] == -1)) {//是黑白棋子才能判断 if (i == 0 || i == 18 || j == 0 || j == 18) {/*【找四个边角】*/ if (i == 0) {//第一行 if (j == 0) {//第一列(即左上角0,0点) if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; };//右和下++ if (a[i + 1][j] == 0 && b[i+1][j] == 1) { Co++; b[i + 1][j] = 0; }; if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); } if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); } } else if (j == 18) {//第19列(即右上角) if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; }//左j-1, if (a[i + 1][j] == 0 && b[i + 1][j] == 1) { Co++; b[i+1][j] = 0; }// if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); } if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); } } else if(j>0&&j<18) {//第一行的其他列 if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; };//左右下++ if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; }; if (a[i + 1][j] == 0 && b[i + 1][j] == 1) { Co++; b[i + 1][j] = 0; }; if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); };//左右下++ if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); }; if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); }; } } else if (i == 18) {//第19行 if (j == 0) {//第1列(即左下角) if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; };//右和上++ if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; }; if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); };//右和上++ if (a[i - 1][j] == a[i][j] && b[i - 1][j] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; } else if (j == 18) {//第1列(即右下角) if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; };//左和上++ if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; }; if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); };//左和上++ if (a[i - 1][j] == a[i][j] && b[i - 1][j ] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; } else if(j>0&&j<18){//i-1为上一行,j+1,j-1为右侧一列和左侧一列。 if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; }; if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; }; if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; } if (a[i - 1][j] == a[i][j] && b[i - 1][j] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); };//左和上++ if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); }; }; } if (j == 0) {//第1列 if (i>0 && i<18) {//非角落,仅边 if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; };//上一行 if (a[i + 1][j] == 0 && b[i + 1][j] == 1) { Co++; b[i + 1][j] = 0; };//下一行 if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; }//右一列 if (a[i - 1][j] == a[i][j] && b[i - 1][j] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); };//左和上++ if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); }; }; } if (j == 18) {//第1列 if (i>0 && i<18) {//非角落,仅边 if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; };//上一行 if (a[i + 1][j] == 0 && b[i + 1][j] == 1) { Co++; b[i + 1][j] = 0; };//下一行 if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; };//左一列 if (a[i - 1][j] == a[i][j] && b[i - 1][j] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); };//左和上++ if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); }; }; } } else {//非边角 if (a[i][j + 1] == 0 && b[i][j + 1] == 1) { Co++; b[i][j + 1] = 0; }//右和下++ if (a[i + 1][j] == 0 && b[i + 1][j] == 1) { Co++; b[i + 1][j] = 0; }; if (a[i][j - 1] == 0 && b[i][j - 1] == 1) { Co++; b[i][j - 1] = 0; };//左和上++ if (a[i - 1][j] == 0 && b[i - 1][j] == 1) { Co++; b[i - 1][j] = 0; }; if (a[i][j + 1] == a[i][j] && b[i][j + 1] == 1) { b[i][j + 1] = 0; Co += S(i, j + 1); };//右和下++ if (a[i + 1][j] == a[i][j] && b[i + 1][j] == 1) { b[i + 1][j] = 0; Co += S(i + 1, j); }; if (a[i][j - 1] == a[i][j] && b[i][j - 1] == 1) { b[i][j - 1] = 0; Co += S(i, j - 1); };//左和上++ if (a[i - 1][j] == a[i][j] && b[i - 1][j] == 1) { b[i - 1][j] = 0; Co += S(i - 1, j); }; }; }; return Co; }
关于继承,请解释下原因
public class Father { private int i = 1; public void p(){ System.out.println(this.i); } } public class Son extends Father { private int i = 10; public void q(){ System.out.println(this.i); } } public class Main { /** * @param args */ public static void main(String[] args) { Son son = new Son(); son.p(); } } 输出为1 是什么原因呢? [b]问题补充:[/b] 我DEBUG过this this的值是子类的对象,却没有去得到子类的成员变量 所以才会有了这个简单的问题 希望大家帮我解答 [b]问题补充:[/b] 我在Father类里写了个方法 public void s(){ System.out.println(this.getClass().getName()); } 结果为Son,证明this确实是子类的对象 [b]问题补充:[/b] [quote]Son的内存地址空间其实是有两个变量i,一个是从父类继承来的,一个是自己声明的, [/quote] 这个事理解的 [quote] 当调用父类的方法时,此时的进入的堆栈地址空间是父类的地址空间 [/quote] 这个怎么保证??或者怎么实现??我看了《深入JVM》 好像没有解释 [b]问题补充:[/b] [quote]输出为1的原因 Java语言规定:任何一个子类的构造方法都必须调用其父类的构造方法,而且调用负累构造方法的语句必须是在子类构造方法的第一条语句,其格式为: super(调用参数列表); “super(调用参数列表)”就会调用父类的相应构造方法。如果在程序中没有显示写上调用父类构造方法的语句,则Java在编译和执行时会在子类构造方法的第一条语句前自动地隐式地添加调用不含任何参数的父类构造方法语句。所以在调用子类的构造之前,系统会调用其父类的构造方法。因此,上述例子中输出结果第一句是“1”. [/quote] 你没看明白我的意思。。。。。。其实 lovewhzlq 已经解释清楚了 我去查了虚拟机规范 这个应该是最小作用域的体现
Javascript闭包与python 闭包
<p>下列代码很好的展示了JS函数的闭包</p> <p> </p> <pre name="code" class="java">var f=[]; for(var i=0;i&lt;10;i++) f.push(function(){alert(i);}); f[0]();</pre> <p> </p> <p><span style="color: #ff0000; font-size: medium;">打印 10.因为 所有f函数都共享同一个作用域window,调用时查找的是同一个window的i,即循环结束后的i<br></span> </p> <p> </p> <p>解决方法很多 ,其中之一是  i 复制到 函数最底层作用域中。</p> <p> </p> <pre name="code" class="js">var f=[]; for(var i=0;i&lt;10;i++) f.push(function(i){return function(){alert(i);}}(i)); f[0](); </pre> <p> </p> <p>据某人说 : perl python 刚开始的表示就可以输出0 ,且有块作用域 ,我觉得 javascript 更合理啊,按照perl python 的做法 ,岂不是 定义函数时把函数里用到的外部变量 全部给自己做copy ???</p> <p> </p> <p>不懂perl,python ,是真的这样么</p> <p> </p> <p> </p> <p>参考 :</p> <p> </p> <h3 class="type_reprint" title="转载"> <a href="../../blog/356700">JavaScript对象模型-执行模型</a> </h3>
JavaScript的闭包的相关问题
&nbsp;&nbsp;&nbsp; 最近在学习《JavaScript高级程序设计》,其中关于闭包的两个例子,我照着书中的例子运行时,浏览器不打印也不报错,由于我是初学,才疏学浅,发现似乎是createFunctions()的循环不太对,但也没有调试成功,现在贴出来,还望大家共同讨论,各抒己见。 <br />&nbsp;&nbsp;&nbsp;&nbsp; 下面我把两个例子贴出来,希望有兴趣的朋友能够回复,看看是什么原因造成的: <br />&nbsp;&nbsp;&nbsp;&nbsp; 例子1: <br /><pre name="code" class="java"> &lt;html&gt; &lt;head&gt; &lt;title&gt;对象&lt;/title&gt; &lt;/head&gt; &lt;script type="text/javascript"&gt; function createFunctions(){ var result = new Array(); for(var i=0;i&lt;10;i++){ result[i] = function(){ return i; }; } return result; } var funcs = createFunctions(); //分别输出0、1、2……9 for(var i=0;i&lt;funcs.lenght;i++){ document.write(funcs[i]() + "&lt;br/&gt;"); } &lt;/script&gt; &lt;body&gt; &lt;/body&gt; &lt;/html&gt; </pre> <br /> <br /> <br />例子2: <br /> <br /><pre name="code" class="java"> &lt;html&gt; &lt;head&gt; &lt;title&gt;对象&lt;/title&gt; &lt;/head&gt; &lt;script type="text/javascript"&gt; function createFunctions(){ var result = new Array(); for(var i=0;i&lt;10;i++){ result[i] = function(num){ return function(){ return num; }; }(i); } return result; } var funcs = createFunctions(); //分别输出0、1、2……9 for(var i=0;i&lt;funcs.lenght;i++){ document.write(funcs[i]() + "&lt;br/&gt;"); } &lt;/script&gt; &lt;body&gt; &lt;/body&gt; &lt;/html&gt; </pre> <br /> <br /> <br />&nbsp;&nbsp;&nbsp; 另外,我对闭包的概念理解得也不透彻,不太明白闭包的定义:“闭包是指有权访问另一个函数作用域中的变量的函数:,那么在什么情况下使用闭包呢? <br />&nbsp;&nbsp;&nbsp;&nbsp; 还有匿名函数的销毁,有一个疑问:匿名函数用完后,必须置为null吗?是因为闭包对活动对象的引用造成的吗? <br />&nbsp;&nbsp;&nbsp;&nbsp; 期待同仁赐教,不胜感激。
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问