这里设置的编码有没有重复 有什么不同??pageEncoding是jsp文件本身的编码 编译器的编码方式contentType的charset是指服务器发送给客户端时的内容编码 浏览器的解析方式..._接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现">
当前位置:   article > 正文

java基础疑难解答_接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>这里设置的编码有没有重复   有什么不同??

pageEncoding是jsp文件本身的编码   编译器的编码方式

contentType的charset是指服务器发送给客户端时的内容编码    浏览器的解析方式  

 

 

 

 

 


el表达式可以插入到jsp页面的哪些地方?

这里的el值可以是看成一个变量值, 可以放在

js中 ,HTML页面中都可以

与jstl一起使用,判断(布尔表达式),遍历(对象的集合)  

作为参数传入到后台(变量或是对象)

 

 

 

 

 

前台传入到后台的传入值需要考虑的问题:

前台:传到后台:json 数据的形式  ,表单,变量的形式

           接受:ajax获得的json类型的数据     el表达式

后台:接受:通过request(HttpServletRequest) 的方法获得

           传到前台:通过response对象把数据(json类型的数据,字符串)写到response缓冲区中然后被Tomcat引擎包装成响应。(存入到域

 

 

 

 

HttpServletRequest和ServletRequest的区别以及HttpServletRequest对象方法的用法???

 

答:Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。

相比于HttpServletRequest接口,ServletRequest的应用范围更加广泛,HttpServletRequest只适合在web开发中的http协议的请求,而

ServletRequest则没有具体要求。

HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。 例如:

getHeader(), getMethod() , getSession() (获得session对象只能通过HTTPservletrequest对象获得)

 

 

 

 

URL与URI的区别  服务器的地址与客户端地址的区别???

  getRequestURL方法返回客户端发出请求时的完整URL。(有HTTP协议头  ,有服务器的主机名和端口号)

  getRequestURI方法返回请求行中的资源名部分。(没有上面这些  )

    客户端地址:带项目名(重定向)

    服务器端地址:不带项目名(转发)

  

 

frame  响应式框架(用于后台管理,不过网页的大小只能是你屏幕的大小)

  1. <!DOCTYPE html>
  2. <html>
  3. <frameset rows="15,70%,15%">//把页面占据化成多少个部分,每个部分页面的比例
  4.     <frame src="header.html" />
  5.     <frame src="center.html" />
  6.     <frame src="footer.html" />
  7. </frameset>
  8. </html>
  9. iframe(要设置大小  是否需要有滚动条)  作用就是一个网页中加载一个网页)(头和尾)
  10. 可以让IFrame随着嵌入页面的内容大小自动调节大小而不出现滚动条
  11. <script type="text/javascript">     
  12.               iFrameResize({
  13.                 log                     : true,                  // Enable console logging
  14.                 enablePublicMethods     : true,                  // Enable methods within iframe hosted page           
  15.             });
  16. </script>
  17. <iframe src="http://anotherdomain.com/frame.content.html" width="100%" scrolling="no"></iframe>

 

面向对象与面向过程的区别

 

说说你对面向对象三个特性的理解(封装,继承,多态)举例说明

封装:就是某些方法封装起来 程序员主要需要知道 输入参数,输出类型 方法的功能就可以了。我们使用的框架或是某些工具的时候需要导入jar包    你们就是一些写好功能的类,这些类被封装起来,需要的时候只需要调用。类中的方法就可以了。

继承:继承父类   就是有了这个类的方法和字段 属性  同时可以方法的增强。

多态:一个接口可以被多个类实现。。   方法的重载  

 

 

 

接口和抽象类的区别:

1、抽象类和接口都不能直接实例化,如果要实例化,

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口

的时候,如不能全部实现接口方法,那么该类也只能为抽象类。(不怎么会用到)

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

7、抽象类里可以没有抽象方法

8、如果一个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。(抽象方法不能静态,不能私有。)

10、接口可继承接口,并可多继承接口,但类只能单根继承。

类中的方法名和成员变量设置不一样的权限,

 

抽象方法的类就是抽象类  子类继承的时候一定要重写抽象方法

接口的所有方法都是静态方法。

 

继承:

把父类抽象类与接口区分开来

 分类除了用final修饰的类其他;类都可以作为父类,调用子类的方法没有的时候回调用父类的方法(因为继承了父类其实就是把父类的

方法和成员变量都给了子类  写了extends 某个类就拥有了这个类所有的成员变量和方法)

 

 

 

多态:

一个接口 被多个类实现

方法的重载

 

 

 

private,prodect,public的使用

注意 private 和protect不能修饰类

private(本类)、protect(该包,和继承的类),public(该项目的所有类)、default(该包下)

字段往往设置为私有(pojo中)  成员变量和方法设置为public

 

 

 

 

jdk jvm jre 的区别,和分别的作用是什么???

jre  java运行环境(java命令(执行.class文件))

jdk  Java的开发环境(包含jre  多了一些命令   Javac(把Java文件转成.class文件))

jvm  Java虚拟机(把.class文件转成二进制文件)

 

 

 

 

异常和错误的区别??什么时候会出现错误什么时候会出现异常??说说你对异常的理解???

 

错误是非程序错误,有可能是硬件(内存不足out of memory就是虚拟机空间),断电,或者其他非通过程序可解决的错误叫error,一般

能通过程序解决的叫异常

异常如果不处理那么全都都会由Java虚拟机来处理。  处理就是调用异常的某些方法  .getMessage() e.printStackTrace

(printStream/printWriter);

 

处理异常的作用就是当程序出问题的时候找到问题的所在。

某些类的方法调用的时候就会出现异常提示需要你进行处理 ,不出来,Java虚拟机就会帮你处理(jdbc 中的 NullPointerException,

IOException、SQLException) (如果出现异常不知道怎么处理可以百度某种经常出现的原因。

 

throw 与throws的区别:

一个写在方法中  一个写在方法体中  其实意义都是一样的   调用这个方法的的调用者来处理异常

  1. public static void main(String[] args) {
  2. // TODO Auto-generated method stub
  3. String s = "abc";
  4.     if(s.equals("abc")) {
  5.       throw new NumberFormatException();
  6.     } else {
  7.       System.out.println(s);
  8.     }
  9. }


 

在开发的过程中良好的编程习惯有哪些

1. 命名规范,有意义     多写注释。

2,少用空格  多用tab(快速对齐)

3.自己写完的代码要多做测试

 

 

做测试:

前台web层的测试    dao层的测试    service 中的功能测试

 

 

 

堆存储与栈存储的区别  new的对象在堆中   什么类型的数据放在堆栈中???

参看博客:https://blog.csdn.net/chensi16114/article/details/72867260

1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等

2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。

除了这两部分,还有一部分是:

3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

 

 

value写好,用户操作了哪个就会传入哪个(radio,CheckBox select)

  1. <select name="is_hot">//传入到后台是value是你选中的值,而name=is_hot   显示是、否
  2. <option value="1"></option>
  3. <option value="0"></option>
  4. </select>
  5. radio:CheckBox也是一样(radio命名为同一name  value为选中的值,CheckBox也是命名为同一个name  value为选中的的值)
  6. <label for="inlineRadio1" class="col-sm-2 control-label">性别</label>
  7. <div class="col-sm-6">
  8. <label class="radio-inline">
  9. <input type="radio" name="sex" id="sex1" value="male" >
  10. </label>
  11. <label class="radio-inline">
  12. <input type="radio" name="sex" id="sex2" value="female">
  13. </label>
  14. <label class="error" for="sex" style="display:none ">您没有第三
  15. 种选择</label>
  16. </div>
  17. 传入到后台是用户输入的值(之前没有写好)text,password date file
  18. <input type="text" name="pname" value="" id="userAction_save_do_logonName" class="bg"/>
  19.                                      //传入到后台的是:name=就是属性name的值,  value=用户输入的信息
  20. <input type="date" class="form-control" name="birthday">出现的是一个date日期控件 value是用户选中值
  21. ServletContext context = this.getServletContext();//this指的的servlet吗?

 

map的遍历

Map<String, String[]> parameterMap = request.getParameterMap();

for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){//map集合的遍历方式就是这样的

System.out.println(entry.getKey());

for(String str:entry.getValue()){

System.out.println(str);

}

 

八进制和十六进制的意义:   

(十六进制中的一位表示四位二进制 十六进制的写法举例Ox1313 (常用)       八进制的一位表示三位

二进制O45   注意前面的是数字零 不是字母O  )

二进制数是计算机进行计算的基本进制,它能方便地通过0和1两种状态表示各种数值,这使得逻辑电路的设计简洁。八进制和十六进制对

二进制的转换十分方便,同时又能将较大的二进制数以较短的字数来表示,便于人们书写和记录,所以使用八进制和十六进制来表达二进制数。

 

 

length() 与length

str.length()都是表示字符的长度。   一个数字,字母,中文都表示一个字符(Unicode的编码方式是这些都是占用两个字节,但是UTF-8 数字字母只占一个字节   中文占用三个字节)

Array.length   数组单元的个数

 

 

 

字节与字符

一个字节有八位,但是一个字符可以是一个或是多个字节

一个中文占用字节数可能是2个、3个、4个字节。不同的编码格式占字节数是不同的,

 

编码方式:就是对于字母,数字 字符如何表示弄成二进制的表  有些只支持英文 字母,数字  有些支持中文,全世界的字符

ASCII码---非ASCII编码(GB2312支持中文)--Unicode(世界上的所有字符   字符长度不变)--UTF-8长度(在Unicode的基础上  字符

长度可变)。

 

 

 

 

有关乱码的问题:

前台传给服务器不出现乱码问题:(注意Tomcat使用的码表默认是ISO8859-1. )

post:request.setCharacterEncoding(“UTF-8”);//post 方式

 

乱码问题通用的解决办法:

get/post都可以(不过post不常用因为每个字符这是增对单个字符串的编码解码方式):

parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);//对字符串进行iso8859-1编码,utf-8解码

 

服务器传给前台不出现乱码问题:

response.setContentType("text/html;charset=UTF-8");//告诉Tomcat使用什么方式编码,并告诉浏览器使用什么方式解码

 

数据库中的字符集其实就是设置数据库的编码方式(保证服务器传入数据库的数据/或是导入到数据库中的数据   可以正常的显示)

 

 

 

编码和解码的区别  

编码是把高级语言或代码 转成二进制的代码     

解码把二进制的代码转成高级语言获得代码

 

 

 

 

 

String与stringbuffer的区别

String定长的字符串, stringbuffer表示不定长的字符串  string主要方法用于查询字符,但是stringbuffer可以对字符进行增删改

 

String 转StringBuffer

String temp="fsfs";

StringBuffer sb = new StringBuffer(temp);

 

Stringbuffer 转String类型的数据

sb.toString()

 

 

 

 

 

 

 

System/Math /Random这些对象主要的方法??

  1. System类
  2. 包含一些有用的类字段和方法。它不能被实例化。
  3. 字段(成员变量):
  4. in
  5. “标准”输入流。
  6. out
  7. “标准”输出流。
  8. 常用的方法:
  9. public static void gc()
  10. 运行垃圾回收器。
  11. public static void exit(int status)
  12. 终止当前正在运行的 Java 虚拟机。参数用作状态码;  一般情况,需要终止Jvm,那么参数0
  13. public static long currentTimeMillis()
  14. 返回以毫秒为单位的当前时间
  15. 单独使用,没有意义。一般情况,来测试一段代码的执行效率
  16. public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)
  17. 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
  18. src:原数组
  19. dest:目标数组
  20. srcPos :从原数组的哪个位置开始
  21. destPos:到目标数组的哪个位置结束
  22. length:长度
  23. Math用于求比较数的大小 ,进位,四舍五入
  24. Random  随机产生某个数字

 

 

 

集合ArrayList  LinkedList,HashSet .  HashMap 主要的方法,分别在什么情下使用以及的Intertor区别之间的转换

ArrayList  元素有放入顺序,元素可重复  用于查询效率高

LinkedList  元素有放入顺序,元素可重复   用于增加和删除效率高

HashSet 元素无放入顺序,元素不可重复

另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。

HashMap 键值对

 

 

 

多种输入输出流之前的区别,分别什么时候使用   文件拷贝   上传下载  获得文件信息的方法(文件上传下载)

 

File类是IO包中唯一代表磁盘文件本身的对象。通过File来创建,删除,重命名文件。File类对象的主要作用就是用来获取文本本身的一

些信息。如文本的所在的目录,文件的长度,读写权限等等。(有的需要记忆,比如isFile(),isDirectory(),exits();有的了解即可。

 

主要方法:

File(String pathname):根据一个路径得到File对象

 

public  boolean isDirectory():判断是否一个文件夹

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

 

public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

 

字节流                                       字符流  

inputStream/outStream  (利用数组)           Reader/Writer(利用字符串)

 

 

 

jdk在安装完之后需要配置三个变量,这三个变量分别是在配置什么东西???

  1. 1 创建JAVA_HOME,值是你的刚刚jdk的安装目录,比如 C:\Program Files (x86)\Java\jdk1.8.0_101
  2. 2 创建CLASSPATH,值是  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
  3. 3 编辑Path,把值放到最前边  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

 

我们学习的request和response是HttpServletRequest  和HttpServletResonse

不是没有HTTP的 但是在过滤器中 和service ,方法中的都是不带HTTP的,如果需要获得请求或是设置

响应的信息需要强转成带HTTP的

浏览器设置下载文件的编码可以在客服端设置吗   友好的话还是要在服务器端设置.....

 

 

jsp中的page指令

errorPage:当前页面出错后跳转到哪个页面

isErrorPage:当前页面是一个处理错误的页面(一起使用,出错是什么情况页面展示不出来?  出现异常的时候)

 

 

引用类型与基本类型的区别,

变量就是一个房间的房号,值类型房间里面是本人,引用类型里面住的是本人的秘书,要找到本人,必须通过本人的秘书

值类型的变量放在栈内存中,引用类型的值放在堆中但是地址在栈中

 

常量池

(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。

看例1:

  1. String s0=”punkll”;
  2. String s1=”punkll”;
  3. String s2=”punk” + “ll”;
  4. System.out.println( s0==s1 );
  5. System.out.println( s0==s2 );
  6. 结果为:
  7. true
  8. true
  9. 首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。
  10. 因为例子中的s0和s1中的”punkll”都是字符串常量,它们在编译期就被确定了,所以s0==s1true;而”punk”和”ll”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”punkll”的一个引用。
  11. 所以我们得出s0==s1==s2;
  12. 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

看例2:

  1. String s0=”punkll”;
  2. String s1=new String(”punkll”);
  3. String s2=”punk” + new String(“ll”);
  4. System.out.println( s0==s1 );
  5. System.out.println( s0==s2 );
  6. System.out.println( s1==s2 );
  7. 结果为:
  8. false
  9. false
  10. false
  11. 2中s0还是常量池中”punkll”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”punkll”的引用,s2因为有后半部分new String(“ll”)所以也无法在编译期确定,所以也是一个新创建对象”punkll”的应用;明白了这些也就知道为何得出此结果了。
  12. ==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true

 

声明    赋值  引用

声明:在栈中创建了一个指针

赋值:指针和堆中的一个实体绑定关系

引用:通过指针调用实体

 

 

== 和equals的区别

== 和equals在引用类型中才有区别  在数值类型中没有区别

 

 

引用类型与值类型

引用类型:对象的内容是放在堆中的,指针放在栈中

值类型:内容直接就在栈中

 

new出来的变量地址是不一样的,直接声明的变量的地址是一样的

var a = 10;

var b = a;

b = 20;

console.log(a); // 10值

 

 

var obj1 = new Object();

var obj2 = obj1;

obj2.name = "我有名字了";

console.log(obj1.name); // 我有名字了

 

 

读取解析两种配置文件方法:

解析properties文件

/**

 * 静态代码块加载配置文件信息

 */

 

//通过类加载器获取资源传入输入流中   用properties对象获取加载到流资源,在通过相关的方法获取到流中的信息

 

//properties对象只能加载properties中的配合信息。。。

static {

try {

// 1.通过当前类获取类加载器

ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();

// 2.通过类加载器的方法获得一个输入流

InputStream is = classLoader.getResourceAsStream("db.properties");

// 3.创建一个properties对象

Properties props = new Properties();

// 4.加载输入流

props.load(is);

// 5.获取相关参数的值

driver = props.getProperty("driver");

url = props.getProperty("url");

username = props.getProperty("username");

password = props.getProperty("password");

} catch (IOException e) {

e.printStackTrace();

}

 

}

 

/**

 * 获取连接方法

 *

 * @return

 */

public static Connection getConnection() {

Connection conn = null;

try {

Class.forName(driver);

conn = DriverManager.getConnection(url, username, password);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

 

解析xml文件的方法:

Java中常用解析xml文件的方法:Sax (一遍扫描一遍解析)(simple API for XML)pull(常用在安卓开发中),doM(先全部加载在解析)文档对象模型(Document Object Model,简称DOM

常用的解析开发包:

Jaxp(dom 和sax解析),jdom jsoup(处理HTML特定解析开发包),dom4j(hibernate)

 

 

增强方法的三种方式:

1.继承重写某个方法:

 

2.动态代理

JDK的Proxy动态代理:(实现统一的接口 通过反射的原理)

1.目标对象:

2.通过目标对象获得代理对象(在匿名内部类中进行方法的增强)

TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(

target.getClass().getClassLoader(), //获得类加载器

target.getClass().getInterfaces(), //实现同一接口

new InvocationHandler() {  //InvocationHandler()用于增强方法的匿名内部类

@Override

//被执行几次?------- 看代理对象调用方法几次

//代理对象调用接口相应方法 都是调用invoke

/*

 * proxy:是代理对象

 * method:代表的是目标方法的字节码对象

 * args:代表是调用目标方法时参数

 */

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

//反射知识点

Object invoke = method.invoke(target, args);//目标对象的相应方法

//retrun返回的值给代理对象

return invoke;

}

}

);

 

3.通过代理对象相关的方法

Cglib代理:(继承同一个类)

 

4.装饰者模式:

举例:

假设要制造添加甜蜜素和着色剂的馒头:

1.需要生产一个正常馒头

2.为节省成本(不使用玉米面),使用染色剂加入到正常馒头中

3.和面,最后生产出染色馒头

一..先实现做面包的接口

    IBread接口包括准备材料,和面,蒸馒头,加工馒头(即调用前面三个步骤)

二.制作正常馒头(普通的馒头,正常的馒头)

三.定义出制作面包的抽象类(要传入正常面包)

    抽象类实现了IBread这个制作面包的接口,同时包含IBread接口的实例

    对应上述的第2个注意点:装饰者类内有一个真实对象的引用

四.生产有着色剂的"玉米馒头"(装饰二)

    继承AbstarctBread类,所以可以有选择的覆盖正常生产馒头的方法,并添加原有方法原来的信息,同时也可以添加自己的方法

五.生产有甜蜜素的"甜馒头"(装饰一)

    实现与第四部一样

六.开始制作添加甜蜜素和着色剂的馒头(做好吃的馒头)

public class Client {

 4 

 5     public static void main(String[] args) {

 6         

 7         System.out.println("=======开始装饰馒头");

 8         IBread normalBread = new NormalBread();

 9         normalBread = new SweetDecorator(normalBread);

10         normalBread = new CornDecorator(normalBread);

11         normalBread.process();

12         System.out.println("=======装饰馒头结束");

13     }

14 }

 

约束:

 Xml文件的标签是可以任意取名的, 但是如果引用了约束就只能使用约束规定的的标签

 

Dtd约束

这个约束可以是在本地的电脑里(本地dtd),也可以是在网络上 (外地dtd)(需要连接网络  使用普遍   框架也是使用这个(struts2 ,hibernate) 不连网的话需要把dtd约束导入到eclipse中)

Schema约束(spring)

有网的话只需要导入头部信息就可以了

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号