开发过程中的疑问及解析
2016-12-29 21:26
253 查看
前言:针对在开发过程中的一些疑问进行整理,并对这些疑问进行有针对性的解析。
当前正在学习阶段,如果发现有什么错误或疑问请请在此博文中留言,我会尽快的解决!
场景:创建一个新的Maven项目,其构建的Java环境显示是1.5,手动将其更改为计算机当前Java环境,但是更新Maven项目后右转换为1.5版本了!
官方文档中有如下描述:
编译器插件用来编译项目的源文件。从3.0版本开始, 用来编译Java源文件的默认编译器是
1.6)。 如果你想强制性的让插件使用
同时需要注意的是目前的
the -source and -target of the Java Compiler。
总的来说:
这是
它会从
因此除非
否则你每次更新项目配置的时候它都会重置到
解决办法:
在pom.xml文件中增加如下配置:
参考:
官网资料
为什么Maven会更改Eclipse JDK设置
场景:在Eclipse中集成Maven后,查看
解决办法:Window → Preference → Maven
场景:无意间发现代码折叠功能不能用了!
解决办法:很可能是误摁了快捷键
在导入代码的时候,会出现乱码,如果更改整体配置则需要换来换去,因此我们可以针对单个文件来配置其字符集,文件上右键 → properties → Text file encoding → other 然后选择字符集,可是没有GBK怎么办?我们可以直接清除其中内容,然后手动更改为GBK即可。
插件名称:
解决办法:加上
出现的原因:项目配置的是使用Tomcat 6.0 ,但是eclipse中没有。
解决办法:在工程目录下的
出现的原因:在
解决办法:使用
解决办法:
中加入
针对
使用
还有一种配置方式,说是可以实现,无需断开连接,当对数据进行修改后,就会被持久化得方法。就是使
参考资料:HSQLDB(HyperSQL DataBase)在文件模式(File Mode)下数据的持久化
安装时,出现了这种错误,
需要升级一个插件,
https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package
安装完成后即可成功安装数据库服务器。
如果检测两个字符串的内容是否相等,我们可以使用equals方法进行检测,切忌不要使用==来比较这两个字符串的内容是否相同。原因是:==只是比较这两个字符是否都放在同一个地方,也就是比较的是存放的地址是否相同。
然而如果字符串是空的(NULL)那么使用equals会抛出空指针异常,需要切记。
如果是要比较连个字符串是否相等,最好的写法是
空串
Java中的属性和字段的区别:Java中的属性,通常可以理解为
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的
类成员(字段),通常是在类中定义的类成员变量,例如:
我们可以说
说明:
相同点:
都可以做比较,返回值都是
不同点:
注意:一般情况下
答案是两个;首先会在常量池中查找是否有
解析:其中
不难发现最后转换为
基本数据类型在传递的时候是不会改变值的,而引用数据类型在传递的时候是传递的对象的地址值,所以在方法内部改变其值,随之这个对象也就变化了。
注意:
我们首先要了解其内部实现机制,如果其常量值(不为
原因:把<form></form>写到<table></table>里面了!
解决办法就是反过来就可以了!
首先说明一下
起初
Spring表达式语言(简称为SpEL)是一种
通过上面的介绍我总结如下:
创建的初衷就是在
。。。
使用快捷键:Shift + Ctrl + M
菜单位置: Packages → Markdown Preview → Toggle Preview
将
另存为PDF或者导出 → 创建PDF/XPS,然进行配置如下:
下面红框,默认是没有勾选的,要想生成书签需要打勾,选择
点击保存,完成上面设置,生成的PDF文件就会有目录书签了,阅读起来就方便多了。
可能你勾选了无法嵌入字体情况下显示文本位图
工具 → 选项 → 文件 → “自动检测打开的文件是否被其他程序修改或删除”,把勾去掉就好了。
在我写过的博客中有两篇博客是对资源的整理,可能对大家都有帮助,大家有兴趣的话可以看看!!
资源大放送 - 图书与视频教程!
常用软件 — 整理
博文编号:20161229212628
当前正在学习阶段,如果发现有什么错误或疑问请请在此博文中留言,我会尽快的解决!
一、Maven
1.1 eclipse中项目的Java版本为1.5,但计算机中的环境并不是1.5?
场景:创建一个新的Maven项目,其构建的Java环境显示是1.5,手动将其更改为计算机当前Java环境,但是更新Maven项目后右转换为1.5版本了!官方文档中有如下描述:
编译器插件用来编译项目的源文件。从3.0版本开始, 用来编译Java源文件的默认编译器是
javax.tools.JavaCompiler(如果你使用的是Java
1.6)。 如果你想强制性的让插件使用
javac,你必须配置插件选项
forceJavacCompilerUse。
同时需要注意的是目前的
source选项和
target选项的默认设置都是
1.5,与运行Maven时的JDK版本无关。如果你想要改变这些默认设置,可以参考Setting
the -source and -target of the Java Compiler。
总的来说:
这是
Maven已知的一个特性,除非在你的
POM文件中显示的指定一个版本,否则会使用编译器默认的
source/target版本
1.5。主要还是在于
Eclipse中
Maven的集成方式起到了关键作用,
它会从
POM文件中生成项目的
.project,.classpath以及
.settings,
因此除非
POM文件指定了正确的
JDK版本,
否则你每次更新项目配置的时候它都会重置到
1.5版本。
解决办法:
在pom.xml文件中增加如下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
参考:
官网资料
为什么Maven会更改Eclipse JDK设置
1.2 如何让Maven下Jar文件的时候下载其源码?
场景:在Eclipse中集成Maven后,查看Maven依赖中
Jar包的源码
解决办法:Window → Preference → Maven
二、Eclipse
2.1 eclipse中的代码折叠功能没有了?
场景:无意间发现代码折叠功能不能用了!解决办法:很可能是误摁了快捷键
Ctrl+/(小键盘上)导致的,再摁一次就出来了!
2.2 eclipse的encoding中没有GBK字符集选项?
在导入代码的时候,会出现乱码,如果更改整体配置则需要换来换去,因此我们可以针对单个文件来配置其字符集,文件上右键 → properties → Text file encoding → other 然后选择字符集,可是没有GBK怎么办?我们可以直接清除其中内容,然后手动更改为GBK即可。
2.3 eclipse中如何安装支持Hibernate的插件?
插件名称:JBoss-Tools。插件下载及安装教程:在Eclipse里添加插件开发Hibernate
2.4 XML文件中的警告提示“No grammar constraints (DTD or XML Schema) referenced in the document.”
解决办法:加上 <!DOCTYPE xml>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xml>
2.5 “Target runtime Apache Tomcat v6.0 is not defined.”
出现的原因:项目配置的是使用Tomcat 6.0 ,但是eclipse中没有。解决办法:在工程目录下的
.settings文件夹里,打开
org.eclipse.wst.common.project.facet.core.xml文件,将
<runtime name="Apache Tomcat v6.0"/>改成你
tomcat的版本比如
<runtime name="自己需要更改的版本"/>。
2.6 JSTL使用SQL标签时报错“Missing end tag for “sql:update””
出现的原因:在sql:transaction或
sql:update标签内使用了
HTML标签
<!-- -->。
解决办法:使用
JSP注释
<%-- --%>
2.7 jsp页面使用 jstl,出现 Unknown tag (…)警告
解决办法:<% page %>
中加入
isELIgnored="false"
三、数据库
3.1 Java代码中的模糊查询时字符串的拼写
针对PreparedStatement我们可以在查询的
SQL命令中预留空缺,用问号代替,我们再动态地添加,但是针对模糊查询就需要拐点弯了。我们需要在模糊查询的时候,在需要动态添加的地方按照非模糊查询的写法写,再在传入的字符串时用组拼的方式将
%%添入即可。
3.2 HyperSql使用file模式但并没有实现永久保存
使用file模式应该可以实现永久保存的特性,但是在测试过程中没有实现。通过搜索资料发现原来是必须关闭数据库才可以保存,就是在URL中添加;shutdown=true但是仍然没有实现永久保存的效果,最后才发现,是有个前提的,那就是必须所有连接都关闭(
conn.close())后才可以。在测试过程中发现我们如果利用代码执行
shutdown命令,即使有conn没有断开,也会永久保存的。
还有一种配置方式,说是可以实现,无需断开连接,当对数据进行修改后,就会被持久化得方法。就是使
;hsqldb.write_delay=false,我查看了API,确实是这么回事,但是测试效果不理想,今后有待理解。
参考资料:HSQLDB(HyperSQL DataBase)在文件模式(File Mode)下数据的持久化
3.3 MySQL server5.7版出现server failed
1: Action 14:02:10: INSTALL. 1: 1: MySQL Server 5.7 2: {EC09D203-422B-4C9F-B623-230EF57EE709} 1: Action 14:02:10: FindRelatedProducts. Searching for related applications 1: Action 14:02:10: AppSearch. Searching for installed applications 1: Action 14:02:10: LaunchConditions. Evaluating launch conditions 1: This application requires Visual Studio 2013 Redistributable. Please install the Redistributable then run this installer again. 1: 1: MySQL Server 5.7 2: {EC09D203-422B-4C9F-B623-230EF57EE709} 3: 3 1: The action 'Install' for product 'MySQL Server 5.7.19' failed.
安装时,出现了这种错误,
MySQL server即数据库服务器没有安装成功。试了多次,在一个帖子里找到了解决方法。
需要升级一个插件,
Visual C++ 2013 and Visual C++ Redistributable Package
https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package
安装完成后即可成功安装数据库服务器。
四、java语言
4.1 检测字符串是否相等?
如果检测两个字符串的内容是否相等,我们可以使用equals方法进行检测,切忌不要使用==来比较这两个字符串的内容是否相同。原因是:==只是比较这两个字符是否都放在同一个地方,也就是比较的是存放的地址是否相同。然而如果字符串是空的(NULL)那么使用equals会抛出空指针异常,需要切记。
如果是要比较连个字符串是否相等,最好的写法是
if(null!=Str&&Str_temp.equals(Str)),这样可以避免空指针异常,同时也可以检查字符串的内容是否相等。需要注意的是,我们应当先写
null!=Str来判断检测的字符串不是
null。
4.2 空串与null串?
空串“”是长度为0的字符串。可以调用以下代码检查一个字符串是否为空:
if(0==Str.length())或者
if(str.equals(""))
null串表示目前没有任何类型与该变量关联
4.3 Java中的属性和字段?
Java中的属性和字段的区别:Java中的属性,通常可以理解为get和
set方法。而字段,通常叫做
“类成员”。这两个概念是完全不同的。属性只局限于类中方法的声明,并不与类中其他成员相关。例如:
void setA(String s){} String getA(){}
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的
a属性(注意是小写
a)。如果去掉了
set的方法,则是可读属性,反之亦然。
类成员(字段),通常是在类中定义的类成员变量,例如:
public class A{ private String s = "123"; }
我们可以说
A类中有一个成员变量叫做
s。
4.4 ==和equals方法的区别?
说明:Object中的
equals方法是比较对象的地址值的(底层是调用的==),没有什么意义,我们常需要重写他,因为开发构成中通常比较的是对象中的属性值,我们认为相同属性是同一个对象,这样我们就需要重写
equals方法。
相同点:
都可以做比较,返回值都是
boolean
不同点:
==号是比较运算符,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值。
Objcet类中的
equals方法只能比较的是引用数据类型,
equals方法在没重写之前,比较的是地址值,底层依赖的是
==号,但是比较底层值时没有意义的,我们需要重写
equals方法比较对象中的属性值。
注意:一般情况下
equals方法进行了重写。
4.5 String s=new String(“abc”)创建了几个对象?
答案是两个;首先会在常量池中查找是否有abc,如果没有则创建,而new则是在堆中创建对象,所以拷贝常量池中的
abc在堆中创建一个对象,然后将堆中的对象的地址赋给栈中的
s;所以说综上所说常量池一个,堆内存中一个,总共两个。
4.6 String s1=”a”+”b”;与String s2=”ab”是否相同
JVM虚拟机有常量优化机制,也就是说在编译的时候常量会进行提前整合,也就是说
“a”+"b"在编译的时候会被优化成
“ab”,所以都是常量池中的同一个
“ab"。
4.7 String a=b+”str”误区
String a="ab"; String b="abc"; String c=a+"c"; System.out.println(b==c);//false System.out.println(b.equals(c));//true
解析:其中
c是通过变量+常量的方式进行创建,所以不会发生常量优化的现象,底层实现代码是通过
StringBuilder或
StringBuffer的
append方法进行连接,最后通过
toString方法转换为
String。首先无论
StringBuilder还是
StringBuffer都是对象,所以在堆内存中进行创建,重点是在
toString方法,我们看一下
toString的底层代码实现:
@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }
不难发现最后转换为
String的方式是通过
new的方式进行创建的,所以其在堆内存中进行创建的,所以说
c保存的地址是在堆内存,而
b保存的地址是在常量池中,因此二者使用
==进行比较的时候是不一样的。
4.8 参数传递时,值问题?
基本数据类型在传递的时候是不会改变值的,而引用数据类型在传递的时候是传递的对象的地址值,所以在方法内部改变其值,随之这个对象也就变化了。注意:
String类型虽然是引用数据类型,但是在作为参数传递时和基本数据类型是一样的,而
StringBuffer则会改变。
@org.junit.Test public void breakTest1() { String a="我是a"; StringBuffer b=new StringBuffer("我是b"); changString(a); changStringBuffer(b); System.out.println(a);//我是a System.out.println(b);//我是b,test } private void changString(String str){ str+=",test"; } private void changStringBuffer(StringBuffer str){ str.append(",test"); }
4.9 自动装箱==误区
我们首先要了解其内部实现机制,如果其常量值(不为new创建的)的范围为
byte类型取值范围(-127—128)的时候不会创建对象,而是从常量池中获取。
@org.junit.Test public void breakTest1() { Integer a=127; Integer b=127; Integer a1=129; Integer b1=129; System.out.println(a==b);//true System.out.println(a1==b1);//false }
五、Java EE
5.1 web.xml配置中的url-pattern的’/‘和’/*‘的区别?
'/'表示该项目的所有请求路径;
'/*'表示只能有一级子路径,它匹配
'/a.jsp'但是不匹配
'/jsp/a.jsp'。
5.2 Invalid location of tag (form)警告!
原因:把<form></form>写到<table></table>里面了!解决办法就是反过来就可以了!
5.3 EL表达式与SpELl表达式的区别
首先说明一下JSTL:标准标签库
JSTL的全名为
Java Server Pages Standard Tag Library。它是由
JCP( Java CommnunityProcess)所指定的标准规范,它主要是给
Java Web开发者提供了一个标准的通用标签库。通过
JSTL,可以部分地取代传统
JSP程序中嵌入
Java代码的做法,可以使得
JSP页面程序的风格趋于统一,并且容易维护。
起初
EL 表达式只是为了方便存取数据所定义的一种语言。它只能使用在
JSTL标签中,而不能在
JSP页面中运用。一直到了
JSP2.0版本发布后,
EL才被正式纳入为
JSP标准规范之一。这时,它才可以直接在
JSP页面程序中使用,只要安装的
Web服务器能够支持
Servlet2.4/JSP2.0。
Spring表达式语言(简称为SpEL)是一种
JSP2的
EL功能类似的表达式语言,他可以在运行时查询和操作对象图。与
JSP2的
EL相比,
SpEl功能更加强大,他甚至支持方法调用和基本字符串模板函数。
SpEL可以独立于Spring容器使用【可以只是当成简单的表达式语言来使用】;也可以在
Annotation或
XML配置中使用
SpEL,这样可以充分利用
SpEL简化
Spring的
Bean配置。
通过上面的介绍我总结如下:
EL表达式可以在
JSP中使用,
EL表达式还可以很好在
JavaScript中得到使用,因为表达式语言正是借用了访问结构化数据的
JavaScript语法。
EL可以很好的和
JSTL或者自定义标签结合使用,因为
EL
创建的初衷就是在
JSTL中使用。
SpEL可以在
Java代码中直接使用,也可以在
Spring的
XML配置文件中使用,从而简化
Spring的
Bean配置。
5.4 Spring整合Struts2时,如何将Action交由Spring进行管理?
。。。
N、其它
<1> Atom编辑器中如何预览markdown?
使用快捷键:Shift + Ctrl + M菜单位置: Packages → Markdown Preview → Toggle Preview
<2>使用Word中提供的PDF转换功能,转换为PDF时生成目录书签?
将Word转换为带目录书签的
Word中应该有目录或书签,可以用
Word中的标题来自动生成目录。如何增加PDF和XPS的加载项,此处不再赘述,百度下Word自带转PDF就可以查到。
另存为PDF或者导出 → 创建PDF/XPS,然进行配置如下:
下面红框,默认是没有勾选的,要想生成书签需要打勾,选择
“标题”就可以了:
点击保存,完成上面设置,生成的PDF文件就会有目录书签了,阅读起来就方便多了。
<3>word导出为PDF后文字无法被选中
可能你勾选了无法嵌入字体情况下显示文本位图
<4>MarkdownPad总是提示“这个文件已被其他程序修改,您是否想要重新载入?”
工具 → 选项 → 文件 → “自动检测打开的文件是否被其他程序修改或删除”,把勾去掉就好了。在我写过的博客中有两篇博客是对资源的整理,可能对大家都有帮助,大家有兴趣的话可以看看!!
资源大放送 - 图书与视频教程!
常用软件 — 整理
博文编号:20161229212628
相关文章推荐
- Web Control 开发系列(二) 深入解析Page的PostBack过程和IPostBackDataHandler
- 【转】Web Control 开发系列(二) 深入解析Page的PostBack过程和IPostBackDataHandler
- 百度地图SDK开发过程中遇到的问题解析
- Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析
- Nginx 模块自主开发六:源码剖析配置文件解析过程
- 解析Java类和对象的初始化过程_J2EE_Java开发_软件开发-编程-IT资源网
- [置顶] Android开发——View绘制过程源码解析(一)
- 解析IBM RTC在软件开发过程的应用实践
- 架构与反射——Struts2开发过程与处理流程解析
- 嵌入式开发过程中透彻数据符号的解析
- 项目开发中的使用过程疑问
- 软件开发过程中的三层架构的深入解析和搭建(一)
- 软件开发过程中的三层架构的深入解析和搭建(一)
- 架构与反射——Struts2开发过程与处理流程解析
- java&android开发中简化json解析过程--选择json解析库
- [转载]解析Java类和对象的初始化过程_J2EE_Java开发_软件开发-编程-IT资源网
- 软件开发过程中的三层架构的深入解析和搭建(一)
- ios开发过程中我遇到的疑问汇总
- 使用C++进行Cocos2d-x游戏开发入门过程中的要点解析
- Android开发——View绘制过程源码解析(一)