-
泛型相关
<?>
允许所有泛型的引用调用,可读不可写
举例:<? extends Number> (无穷小 , Number] 只允许泛型为Number及Number子类的引用调用 <? super Number> [Number , 无穷大) 只允许泛型为Number及Number父类的引用调用 <? extends Comparable> 只允许泛型为实现Comparable接口的实现类的引用调用
-
类变量和实例变量都是成员变量
类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
class person{
static String age; //--类变量
public String name="李四"; //--实例变量
}
public class ClassJava{
public static void main(String[] args){
person A=new person();
A.age="10";
A.name="张三";
System.out.println(A.age); //-结果为"10"
System.out.println(A.name); //-结果为"张三"
person B=new person();
//类变量是针对所有对象的,所以A改变age,B的age也改变
System.out.println(B.age); //-结果为"10"
//实例只改变自身的,所以A对象的name改变,不影响对象B的name变量
System.out.println(B.name); //-结果仍为"李四"
}
}
public class Demo {
private String name; //成员变量、实例变量
private int age; //成员变量、实例变量
private int ID; //成员变量、实例变量
public static final String school = "卡塞尔学院"; //成员变量、静态变量(类变量)
public static String level = "SSS"; //成员变量、静态变量(类变量)
public int getAge() {
return age;
}
public int getId() {
return ID;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setId(int ID) {
this.ID = ID;
}
public void setName(String name) {
this.name = name;
}
public void study(){
String subject1 = "屠龙"; //局部变量
String subject2 = "炼金术"; //局部变量
System.out.println("学习科目: " + subject1 + "、" + subject2);
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.setAge(23);
demo.setId(14000001);
demo.setName("楚子航");
System.out.println("ID: " + demo.getId() + "Age: " + demo.getAge() + "Name: " + demo.getName());
System.out.print("主修科目: ");
demo.study();
System.out.println("学院:" + Demo.school);
System.out.println("等级:" + Demo.level);
}
}
局部变量:类的方法中的变量
static 强调只有一份
final 说明是一个常量,final定义的基本类型的值是不可改变的,但是fianl定义的引用对象的值是可以改变的
当某个类的整体定义为final时,表明该类不能被继承,方法不能被覆盖,且final类中的所有方法都隐式指定为是final的,方法声明为final后还可以有效地“关闭”动态绑定。若方法或类不想让别人来继承和修改,设定为final
- Lucene全文检索开发框架(没有中文分词器)。庖丁解牛paoding-analysis.jar
- Spring MVC的核心DispatcherServlet
- Spring MVC详解
- 所有框架的核心是用了反射
- mybatis动态sql只能判断null不能判断字符串的’’’’。在业务层处理把’’’'设置为null
- 术语ORM对象关系映射
- Hibernate的session未关闭时数据会缓存,下次执行相同的SQL查询操作直接从缓存拿不会操作数据库。如果值对象(vo/pojo/po说法不一样)处于持久状态每次调用setter方法都会更新数据,如果事物是手动控制则调用若干个setter后才发出更新操作。Hibernate的对象状态设计糟糕是性能低的原因,受传统EJB(Entity实体 Bean)的影响
- Annotation注解
@Autowired:按类型自动注入,如果类型相同无法注入
@Resource:可以按类型自动注入,如果类型相同可以设置名称就能用。最好用这个。 - Spring MVC返回值ModelAndView或String
- Spring 其他框架整合spring主要是想用:IOC控制反转(Inversion of Control)容器一个很大的map;DI依赖注入(Dependency Injection)。
spring面向切面AOP(Aspect Oriented Programming)预编译和动态代理。 - ShiroRealm Shiro安全框架,认证,授权(类似Oracle的role,分为实时和非实时)实时频繁操作数据库影响性能,非实时(缓存ShiroCache)。权限等。Shiro的Session不等同于HttpSession,web程序中ShiroSession要结合HttpSession使用。HttpSession包含ShiroSession
- Nginx 反向代理服务器
- Redis key-value存储系统
服务器集群Session缓存问题
16.eclipse 查看jar包源代码两种方式
eclipse不装插件情况下:选中对应jar包,右键选择Properties;
Java Source Attachment;
jar包源:带source的jar包
mybatis日期时间处理https://www.tpyyes.com/a/javaweb/2017/1201/417.html
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
</dependency>
vo类:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Timestamp addtime;//import java.sql.Timestamp包不是util包
xml:
<result column="addtime" jdbcType="TIMESTAMP" property="addtime" javaType="java.sql.Timestamp"/>
处理类:
@RequestMapping("/getAllUser2")
@ResponseBody
public List<User> getAllUser2() {
List<User> userList = userService.findAllUser();
return userList;
}
HTML:
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<input type="button" value="点击获取数据"/>
<table width="80%" align="center">
<tr>
<th>ID</th>
<th>上传者姓名</th>
<th>性别</th>
<th>专业</th>
<th>电话</th>
<th>邮箱</th>
<th>注册时间</th>
</tr>
<tbody>
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function(){
$("input[type='button']").click(function(){
$.post("/Myexam/user/getAllUser2", function(data){
var html = "";
// for(var i=0 ;i<data.length ;i++){
for(i in data){
html += "<tr>"
+"<td>"+data[i].userid+"</td>"
+"<td>"+data[i].realname+"</td>"
+"<td>"+data[i].sex+"</td>"
+"<td>"+data[i].major+"</td>"
+"<td>"+data[i].telephone+"</td>"
+"<td>"+data[i].email+"</td>"
+"<td>"+data[i].addtime+"</td>"
+"</tr>";
}
$("tbody").html(html);
});
});
});
</script>
</body>
</html>