//这是我刚接触java时做的笔记, 后面也没去整理, 可能其中有些理解有误, 仅供参考!!!
1、java中一个英文字母或一个中文汉字都是2个字节来存储.如:(char是16bit)
2、"+"中的任何一端为字符串类型时,另一端会自动转换成字符串类型,如: 22+"22",结果为2222
而与字符型数据相加时,字符型数据转换成整形数据,如:6+7+'A',结果位 78 6+7+"A" ,结果为13A
3、三元运算中,如果前面的表达式为True,则不计算后面的表达式的值, 如:....Three.Java
短路运算中,&&如果前面为假,则不计算后面的表达式.
||如果前面为真,则不计算后面的表达式.
4、Tab与Shift+Tab
5、do{....} while(....);最后有个分号
6、if语句后面一定别加分号
7、在witch语句的case语句后面一定要有个break;语句,否则会穿透;
8、面向过程与面向对象
面向对象的设计思想:你不该去考虑实现一件事的具体步骤,
而是考虑实现这个事情时,都有什么类,这些类都要什么参数,这些类之间 都有什么关系,定他 们的方法
9、每一个变量都是:先声明、再赋值、然后才能使用、
10、局部变量Java没有默认的初始化,
成员变量在没赋值时,默认的初始化为"0".
11、我们的语言:成员变量 = 属性;方法 = 函数
12、形参和局部变量一样,都存放在栈内存中
引用变量:首先在栈内存中有一块存储空间,指向堆内存中(堆内存中存放 变量中的参数,通 过栈内存可以找到堆 内存中的变量值)
13、构造方法,和类重名,没有返回值;
当没有指定构造方法时,,编译器为类自动添加形如:类名( ) { } 的构造方法,
14、静态变量、字符串常量 放在data segment中。
15、static声明的方法,即:静态方法中不再是针对某个对象调用,所以不可以访 问非静态的成员.
非静态方法 必须 是针对某个对象调用.
16 如果你要把一个类放包里,在开头
你编译的文件必须放正确的目录里.
如果你想要在别处用这个类,必须把包的名写全了.(可以引入:import 包 名.*)
class文件的最上曾包的父目录位于classpath下.
执行一个类也需要把目录写全
17 子类拥有父类中private的变量,但没有访问权.
class只能用public和default(省列)来修饰
18 重写时,两个方法完全相同,最好是直接复制父类的方法.
19 继承中的构造方法:
子类中的构造的过程 必须 调用其父类的构造方法;
子类可以使用super(参数)来调用父类的构造方法;
使用this(参数)可以调用当前类的另外的构造方法;
如果用super,必须写在子类构造方法的第一行;
如果子类的构造方法没有调用父类的构造方法,则系统默认调用父类中没有参数的那个构造方法;
如果子类的构造方法没有调用父类的构造方法,而父类中又没有不带参数的构造方法,则编译出错;
20 一个源文件中最多只能有一个public类,而且文件名必须与public类的类名相同;(包括大小写);
21 声明为long类型时,必须在后面家 l 或 L ,否则会出错,如:(整型数据默认为int型);
long i = 888888888L;//必须在后面加个 l 或 L .
同理,需要生命已个float的浮点型数据时,要在其后加 f 或 F .(浮点型数据默认为double型);
22 数据类型按容量由大到小排序为:
byte,short,char-> int -> long -> float -> double.
byte,short,char三者不会相互转换,他们在计算机中计算时,首先会被转换成int型;
排序规则为:"小转大,自动;大转小,强制." 大转小时可能会溢出,要小心/.
但可以把整型常量直接付值给byte,char,short,而不需要进行强制类型转换,只要不出超出范围即可.
23 Java中调用方法: 对象名.方法名(实参);
类的定义: 成员变量 + 方法.
24 各种变量的存放位置: ppt第22张..
25 使用 new + 构造方法 创建一个新的对象;
构造方法是定义在Java类中,用来初始化对象的一个方法;
当没有指定构造方法时,编译器自动为类添加形如: 类名() { } 的构造方法..(ppt77)
26 构造方法 //:.. 构造方法也可以重载.
方法的重载//.. 以定义有 相同名字 ,但 参数不同 的多个方法.
方法的重写//.. 方法的重写必须和 被重写的方法 具有 相同的名字,参数,返回值类型 .
继承中的构造方法//.. ppt119...子类的构造方法 必须 调用父类的构造方法,
27 个权限的范围,ppt115
28 this(参数),,调用了自己类的另外一个构造方法. (教程31.练习)
29 java -version ..查看当前使用的java的版本.
jar vcf xx.jar xx(路劲) 把文件夹xx中的所有内容打包成.jar文件.
30 object类,,它是所有类的跟点,,所有类从它继承.
equals类,,两空值进行比较永远返回 false.
Java中对 String类 中的 equals方法进行了重写.
用 引用变量 instanceof 类,,来判断引用变量所指向的是否属于instanceof后面的类.
31 编写时注意 "=" 和 "==" ,,别老是想写等于,却写成
32 对象的转型,,父类的引用变量可以指向一个子类的 对象 ,但不可以访问子类中新增加的成员(方法和变量);
33 多态//..在执行期间(非编译期间)判断所引用类型的实际对象,根据实际对象调用其方法
1)要有方法的重写
2)要的继承
3)父类引用指向子类对象
(多态:实际new的什么类型,,就是调用哪个的方法.)
34 abstract:抽象方法
如:public abstract void enjoy(); //末尾有 分好 ,不需要大括号等..
含有抽象方法的类必须被声明为抽象类,,抽象类必须被继承,抽象方法必须被重写.
抽象类不能被实例化,,抽象方法只需声明,,而不需实现..
35 final关键字//.. final的变量的值不能被改变,,
final的方法不能被被重写
final的类不能被继承
37 interface(接口)//.. 接口中声明的变量默认为 public static final 的,也只能是 public static final的.
如: 在接口中定义 public static final int i; 和 int i; 是一样的,,都是 public static final 类型的.
接口中只能定义抽象方法,,而且默认为public的,也只能是public的,,省列了public不写也是public的
接口可以继承其他接口,,并添加新的属性和抽象方法.
public interface Valuable(定义一个接口) implements
38 异常//.. try {...语句...
} catch(ArithmeticException ae) {
...语句...}
39 数组要先定义, int[] n;
然后再new, n = new int[5]; //这里的5是数组元素的个数,,即数组的长度,,非下标..
最后才能赋值. int[3] = 3;
40 二维数组//.. 在调用arraycopy方法之后,,用于存放数组的那个二维数组的m[i].length与被复制的那个数组的m[i].length相同.
41 String类//.. 下标是从0开始的,,
方法public int indexOf(String str,int fromIndex),,是从第fromIndex开始,,str在数组中的位置
public String substring(int beginIndex,int endIndex),,返回值不包含enIndex本身,,
42 流//..节点流就是最基础的"管道",,处理流就是包装在外面的"管道"..
使用构造方法FileOutputStream(String s)时,,如果没有那个文件,会自动创建..
43 new FileOutputStream(" ",true);可以接下去继续写入,,以前的东西不会被覆盖掉..
44 写入一个随机数:Math.random()
忽略大小写比较:equalsIgnoreCase()
在使用Data..Stream时,,要遵循先进先出(队列);
InputStreamReader(System.in);
关键字:transient,,当系列化一个类时,,使用transient修饰的变量被透明(即不会被读入);
serializable接口,,需要系列化的类都需要实现此接口,,这个接口是个标志接口,,(没有定义方法);
externallizable接口,,实现此接口可以自己定义类怎么被系列化;;
45 cpu在某一个时刻是但进程的...
46 线程//..启动线程一定要调用Thread类中的start()方法,,
直接调用继承runnable类重写的run()方法,,这只是方法的调用,,是单线程;
在哪个线程中调用Thread.sleep()方法,,就是让哪个线程进入睡眠..
在sleep的线程被打断时,,会抛异常;;
run()方法一结束,,线程就结束;
synchronized锁定当前对象;;如:public synchronized void add() 锁定当前执行该方法的对象;
synchronized (this){ } 执行{}中的代码时,锁定当前对象..
47 wait()是锁定在当前线程的对象停止;;当wait时,,释放锁(跟sleep不一样)..
或说是导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
notify(); 唤醒在此对象监视器上等待的单个线程。
48 BorderLayout是Frame的默认布局方式 (分5区域);
FlowLayout是Panel的默认布局方式 (流水式的);
GridLayout(3,4) 网格布局方式 (3行4列);
49 ppt中的错误之处
(1) ppt115中的defaut权限,,子类可以访问
(2) ppt119最后一点写的不全面,,当没有构造方法时,,会自动创建一个无参数的构造方法;
应该表达为,,当一个类中有构造方法,,但又没有没有参数的构造方法,在其子类中的构造方法中如果没有调用一个已有的
构造方法,,编译出错;
50 数组用length String用length();
51 得到绝对路径;getAbsolutePath();
52 int hashCode()返回此 collection 的哈希码值。当 Collection 接口没有为 Object.hashCode 方法的常规协定添加任何约 束时,为了满足 Object.hashCode 方法的常规协定,程序员应该注意任何重写 Object.equals 方法的类必须重写 Object.hashCode 方法。需要特别指出的是,c1.equals(c2) 暗示着 c1.hashCode()==c2.hashCode()。
53 IO流
节点流:FileInputStream FileOutputStram FileReader FileWriter
处理流:
缓冲流.BufferedInputStram BufferedOutputStram BufferedReader (有readLine()方法) BufferedWriter
转换流.InputStreamReader(可以从键盘输入) OutputStramWriter
数据流.DataInputStream DataOutputStream
打印流.printWriter printStream (都是输出流,,有自动flush功能);
Object流.ObjectInputStram ObjectOutputStream
transient(关键字,,透明化) serialiable(可以被系列化的) externalizable(如果要控制系列化过程,实现此接口)
54 Thread类
静态方法:public static Thread currentThread() 返回对当前正在执行的线程对象的引用。
关键字: synchronized(锁定当前对象) interrupt()(中断线程)
55 toByteArray()对到ByteArrayInputStream()的那个数组; setEchoChar(char c);设置回显字符;
setEditChar(booleam b);设置是否可编辑; public void paint(Graphics g)绘制此组件。
public abstract class Graphics public Object getSource() 最初发生 Event 的对象
56 eclipse的常用快捷键
Ctrl+/ 说明:添加/消除//注释,在eclipse2.0中,消除注释为Ctrl+/
Ctrl+Shift+F 说明:自动格式化代码
Ctril+F6 说明:界面切换
Ctril+Shift+O 说明:自动引入所需要得包
Ctril+Shift+M 说明:查找所需要得包
alt + /
ctrl + shift +/ 注释代码块;
57 当一个float或double的数除以0,,结果为:Infinity
而int,long去除,,报错,,"by zero"
子类继承父类,,不能使用比父类更严的修饰符;
public final class String"String这个类是final的,,不能被继承".
System.currentTimeMillis() 返回以毫秒为单位的当前时间
58 内部类可以非常方便的使用其外部包装类的方法或变量;
双缓冲,,
常量名一般用大写(定义为常量,,易于以后的更改,,而且一般都是public static final的)
Image createImage(int width, int height 创建一幅用于双缓冲的、可在屏幕外绘制的图像。(Component)
59 持有对方的引用,,可以在构造方法中构造;
60 [java.awt.Rectangle] boolean intersects(Rectangle r) 确定此 Rectangle 是否与指定 Rectangle 相交
61 Java.awt.Toolkit.getDefaultToolkit();//获取默认的工具包;
getImage(Strin fileName); getImage(URL)
J2EE
62 JDBC连接数据库:
oracle数据库的连接串:jdbc:oracle:thin:@localhost:1521:xsgl
驱动串:oracle.jbcd.driver.OracleDriver
sql server数据库的连接串:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xsgl
使用多个statement时: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=xsgl
驱动串:com.microsoft.jdbc.sqlserver.SQLServerDriver
mysql数据看的连接串: jdbc:mysql://localhost/xsgl?user=sa&password=671354
驱动串: com.mysql.jdbc.Driver
String sql = "insert into stu values ('" + sno +"', '" + sname + "', '" + sxb + "',
'" + skc + "'," + scj + ")";
63 tomcat的配置:
tomcat中conf目录下的context.xml中的<Context>的属性应配置成reloadable="true"
serlet.xml中的8080处,应加上 URIEncoding="GBK"
64 接口Servlet,实现他的有 抽象类GenericServlet,HttpServlet
65 resp.setContentType("text/html;charset=gbk");
必须放在PrintWriter out = resp.getWriter();之前
且字符串"text/html;charset=gbk"必须是固定的写法;
66 关于路径,将以协议开头或"/"开头的称为绝对路径; 没有的称为相对路径;
web.xml中: <url-pattern>/myfirstservlet</url-pattern>(绝对路径)
这里的"/"表示webapp的路径;
index.html中: <form action=/my/myfirstservlet method=post>(绝对路径)
这里的"/"表示域名的路径;
<form action=myfirstservlet method=post>(相对路径)
67 Servlet生命周期:
加载 ClassLoader
实例化 new(在客服端请求第一次过来时;)
初始化 init(ServletConfig)(tomcat会在适当时间调用)
请求处理 service->protected service->doxxx(多线程的,线程池中找闲着的线程来处理;)
退出服务 destroy()当tomcat关闭,等原因造成tomcat重新加载时;
68 String str = new String(getServletConfig().getInitParameter("name").getBytes("ISO-8859-1")
, "gbk"); //字符编码转换;
69 Map的方法entrySet(),返回值为: Set<Map.Entry<K,V>>
返回此映射中包含的映射关系的 set 视图。
70 tomcat启动: catalina start; catalina stop; catalina debug -->run(跟踪后台)
71 Cookie的特点: 服务器可以向客服端写内容; 只能是文本内容; 客服端可以阻止服务器写入; 只能拿自己
webapp写入的东西; Cookies分两种,属于窗口(存放在内存中),属于文本(有生命周期); 一个servlet/jsp
设置的cookies能被同一路径下面或子路径下面的servlet/jsp读到, 而父路径不能读子路径的Cookies;
72 Cookies: 服务器端写在客服端,长度有限制,只能是文本;
Session: 写在服务端,有个Session ID号,在通过Cookies把ID号写到客服端; 跟路径无关,跟窗口有关;
有父子关系的窗口都访问同一个Session对象;
可以通过URL重写来解决Cookies被禁用的问题;
73 符合j2ee标准的web-app的目录结构:
根目录下有:
WEB-INF
-> classes
->web.xml
->lib
74 /的含义
form
form提交中action的路径可以为虚拟路径,
也可以为绝对路径,/代表http://127.0.0.1/
web.xml
web.xml中url-pattern为webapplication根路径,/代表http://127.0.0.1/Test/
forward中 "/"表示wapp的根路径;
75 乱码
场合:页面本身有中文的时候
解决办法:servlet:resp.setContentType("text/html;charset=gbk");
Jsp: <%@ page contentType="text/html;charset=gb2312"%>
注意:一定要写在PrintWriter out = resp.getWriter();之前
场合:解决get方式乱码问题:
解决办法:修改server.xml (在8080出加) URIEncoding="GBK"
场合:解决post方式提交内容的乱码
解决办法:request.setCharacterEncoding("GBK");
注意:一定要写在存取第一个参数之前
不要调用response.setCharacterEncoding("GBK");
场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
解决办法:<%request.setCharacterEncoding("GBK");%>
注意:
总结: 首先修改server.xml (在8080出加) URIEncoding="GBK"
然后在开头加上<%@page contentType="text/html;charset=gbk"%>和
<%request.setCharacterEncoding("gbk");%>
76 在Servlet中最好不要使用成员变量;
77 mysql命令:
create database xxx; 创建一个xxx数据库
use xxx; 进入xxx数据库
create table xxx; 创建一张xxx表...以"("开头, 中间用","分开,以");"结尾
show databases; 查看数据库 show tables; 查看表 desc xxx; 显示xxx表中的属性;
select * from stud order by sno desc limit 1,2; (查找stud中第一条后数两条的结果)
create table article
(
id int primary key auto_increment,
title varchar(14)
);
创建一个主键(id)递增的表;
select now(); 显示当前时间
select date_format(now(), '%y-%m-%d %h:%i:%s'); 修改时间显示格式
启动服务: net start mysql
登入mysql: mysql -uroot -p
78 在Servlet中使用Bean和在通常程序中使用Bean类似:
属性名称第一个字母必须小写,一般private,比如:private productId;
一般具有getxxx and setxxx;
要具有一个参数为空的构造方法;
但Bean不应具有GUI表现;
一般是用来实现某一业务逻辑或取得特定结果;
80 <%! %>中声明的变量,方法都只有唯一的一份(成员变量);
<% %>可以放java程序代码;
<%= %> =后面必须是字符串,或能装换成字符串的表达式(不能有分号). 相当与"out.println();"
<%@page/include/taglib %>
如: <%= "HelloWorld!" %> 与 <% out.println("HelloWorld"); %>功能相同
<% %>中的代码要加分号, 其他的都不要.
81 <%//....%>:单行注释; <%/*.....*/%>:多行注释; <%-- --%>:服务器端的注释;
<!-- <%...%> -->:HTML注释,这里面注释java代码的内容会被服务器端执行到;
javascript:是在客服端执行; <% %>: 是在服务器端执行;
82 Directive--page:
<%@page language=“script language”| //默认为java语言
extends=“className”|
import=“importList”|
buffer=“none|kb size”| --none:不缓冲,默认8k
session=“true|false”| --是否可以使用session,默认true
autoFlush=“true|false” --缓冲器是否自动清除,默认true
isThreadSafe=“true|false”| --默认false(永远不要设成true)
info=“infoText”| --任何字符
errorPage=“errorPageUrl”| //把错误集中处理;
isErrorPage=“true|false”| //当前页面是一个统一处理错误的页面;
contentType=“contentTyepInfo”|
pageEncoding=“gb2312”
%>
83 Jsp的9个内置对象:
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
84 静态包含:
编译前就已经包含起来了,包含起来再编译; 不能传参数; 两个页面共用一个resquest;
且两个contentType要相同; 两个页面的标签不要重复了;
<html></html> <body></body>:最远原则; <head></head> <title></title>: 就进原则;
85 动态包含:
可以传参数; 产生两个class文件;(被包含的只有到被执行到时才转换成Servlet) 两个request是不同的对象,
但被包含的页面可以取包含它的页面的参数,并添加自己的参数; 但包含页不能取被包含页的参数;
只有客服端的请求过来了才会被编译. "/"表示ip地址;
86 sendRedirect转向,response.sendRedirect(xx.jsp); 等于是先访问一个jsp,然后转向,等于又再ie中输入xx.jsp
再点转到; (转向后,原来那个页面的东西还会继续执行下去.) 可传参数,但取不到前一个页面的参数;
jsp:forward转向: 在服务器内帮你转换,地址没变化; 可以取上一个页面的参数(request是不同的对象);
forward后面的语句不会再被执行到; "/"表示wapp的根路径;
87 jsp中使用javabean:
<jsp:useBean id="cb" class="bean.CounterBean"> 相当于 <% CounterBean cb = new CounterBean(); %>
<jsp:setProperty name="cb" property="count" value="23"/> 相当于 <%cb.setCount(Integer.parseInt("23"))%>
<jsp:getProperty name="cb" property="count"/> 相当于 <%out.print(cb.getCount())%>
88 value='<%= request.getParameter("ietmID") %>' 与 param="ietmID" 前者为单引号"'"
<jsp:setProperty name="hello" property="*" />
一个汉字在utf-8中的编码是3个字节; 在gbk中是2个字节; 1个iso8859-1变成2个字节的utf-8
getContextPath() 得到的是: /my
89 sta.executeUpdate("updata article set isleaf = 1 where id =" + id);
更新数据库中isleaf为1, 在id=id处;
90 ResultSet rs = sta.executeQuery("select count(*) from article where pid=" + pid);
这句sql语句的作用是: 返回数据库中pid=*的所有记录,并记载一个新的字段中..
91 提交到自己页面: 在form中加个隐藏的,然后判断;
PreparedStatement psta = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); //注意;
ResultSet rsKey = psta.getGeneratedKeys();
92 select * from article where pid = 0 order by pdata desc limit 0,5
按pdata排序, 显示从0开始的后5个;
93 BBS总结:
<form name="reply" method="post" action="Replied.jsp" οnsubmit="return check()" > -->js;
sta.executeUpdate("update article set isleaf = 1 where id = " + id); sql语句的使用;
"select * from article where pid = 0 order by pdata desc limit " + start + ", " + pageSize;
//order by pdata desc: 按pdata排序, limit 0,3:分页(从第0个开始的后3个;)
οnchange="document.form1.submit() // js;
java,html,js混合使用;
94 Directive(编译指令):
<%@ Directive 属性="属性值" %>
常见的有: page, include, taglib
Action(动作指令):
常见的有: jsp:useBean , jsp:include, jsp:forward, jsp:plugin
jsp:getProperty jsp:param 嵌入applet
jsp:setProperty
jsp:param用来设定include文件时的参数和对应的值
和编译指令include的区别
include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期 是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
Include不能带参数, 而<jsp:include>可以
95 jsp中的javabean不能使用裸体类, 规范要求;
96 <base href="...">的作用,
97 如果mysql安装时选的是utf-8,在后台使用sql语句时要加: set names gbk;
因为默认mysql会认为输入的sql语句也是utf-8编码;
98 show create table article:
查看表article的具体信息;
99 去除MyEclipse的黄线: General-->Editors-->Text Editors-->Spelling;
Start: 100
01 可以通过修改fckconfig.js和fckeditor.js来改变FCKeditor的"样式".
02 String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
url += request.getContextPath(); //这两个路径前面有带斜杠;(mybbs)
url += request.getServletPath(); //这两个路径前面有带斜杠;(index.jsp)
url += request.getQueryString() == null ? "" : "?"+request.getQueryString(); //后面的参数;
03 正则表达式:
(在Pattern中都有)
.表示一个字符; /d表示一个数字; [...]匹配中夸号中的一个;
正则表达式中"//"表示一个字符'/'
*表示0个或多个
分组用(), 第一个"("表示第一组,第2个表示第二组,以此数下去;
04 3层架构, jsp页面将不再连接数据库, 由业务逻辑层(javabean)来负责与数据库的交汇.
3层即: 显示层,业务逻辑层,数据库层;
05 单例模式顾名思义,就是只有一个实例。
作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实 例。这个类称为单例类。
06 factory method: 比如单例;
simple factory: 直接定义class factory;
abstract factory: 都定义为接口;
07 javascript:document.forms[0].submit() :表示把所有的form作为一个数组拿出,forms[0]表示第一个form;
08 response.setHeader("Cache-Control", "no-store"); //HTTP1.1
response.setHeader("Pragma", "no-cache"); //HTTP1.0
response.setDateHeader("Expires", 0); //prevents catching at proxy server
09 javascript技巧:
<a href = "http://www.whpu.edu.cn" onclick = "return window.confirm('确定投票?')">投票</a>