经常看到许多人问如何配置JDK和JSP,现在我把方法总结下,希望对大家有所帮助。
第一步:下载jdk和tomcat
第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可。
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的jdk安装在c:\jdk1.6):
JAVA_HOME=c:\jdk1.6
classpath=. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%\bin
接着可以写一个简单的java程序来测试JDK是否已安装成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
java_home=C:\Program Files\Java\jdk1.6.0
classpath=.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar;
path =%java_home%\bin;
-------------------------------------------------------------------------------------------------------------------
1、如何编译执行java程序
1、javac -d . 程序的名称.java
2、执行
java 类的全路径
例如:
package com.cstp.java01;
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
编译:
javac -d . Test.java
java com.cstp.java01.Test
2、package的用法:
公司名称.项目名称.模块名称
3、类的命名方式:驼峰命名法
1、类名:首字母大写,第二个单词首字母要大写
HelloWord
2、变量命名:
首字母要小写,第二个单词首字母要大写
4、保留字:没有定义用途,但保留备用。
goto、const
5、变量的概念:
1、使用什么类型的变量
2、变量的作用域:全局变量和局部变量
6、按所属的数据类型划分:
基本类型变量:持有原始值。(真正的原始数据)
int long byte char float double boolean short
引用类型变量:持有引用值。(某个对象的引用,不是该对象本身)
7、数据类型之间的转换
基本数据类型之间的转换
-----------------------------------------------------------------------------------------------------------------------
1、对象的方法
概念:解决某一件事情的途径或者手段
从面相对象角度:是接收外部信息的入口
2、定义方法的时候考虑
1、是否有返回类型
2、是否有参数类型和个数
3、递归算法:
方法本身调用方法
遍历未知的文件夹,树型结构
递归必须要有参数
4、java基础:
逻辑判断
if else
else if
switch(val){
case 条件1:{
break;
}
case 条件2:{
break;
}
default:
break;
}
循环:
for();
while();
do{
} while();
5、方法的调用:
格式:public 返回类型(void) 方法名(参数类型,参数类型){
return 返回值;
}
6、递归调用:
方法本身调用自己:
public int sum(int n) {
if (n == 1 || n == 0) {
return 1;
} else {
return n + sum(n - 1);
}
}
----------------------------------------------------------------------------------------------------------------------------
1、重写和重载
2、继承多态封装
3、接口:
3、方法名称相同,参数列表不同(个数,次序,类型)
1、重载的好处?在不修改方法名称的情况下,需要重载
4、重写:在不同的类之间实现方法的重写,往往是继承关系
继承:
1、为了防止代码的重复性,可调用性
1、从父类的角度考虑:父类尽量实现方法,供子类调用,不要出现太多的抽象方法,
2、子类尽量扩充父类的方法,可以重写
3、super关键字的使用
4、this关键字表示在子类中使用
多态:
在方法传递参数的时候,通常传递的是接口或者是抽象类:只需要将该接口或者抽象类的子类实例化就可以实现不同的功能
public void print(Printer printer){
printer.print();
}
Printer 是接口或者是抽象类
封装:
private 修饰私有变量/属性
对外提供公有的访问方法:
基本数据类型的包装类:
1、主要完成对不同数据类型的转换
2、将一个基本数据类型包装成对象类型、转换规则:从小的往大的转换
=----------------------------------------------------------------------------------------------------------------------------------
1、继承:
继承概念:
儿子继承父亲:财产、权利、事业、长相、血缘
好处:父类有的东西,子类直接可以使用,站在子类的角度:不用编写太多的代码:
2、继承的关键字: extends
A extends B
3、类与类之间的关系有哪几种?
有:has-a 关系:继承关系
是:is-a关系:调用关系
里氏替换原则:如果A类中有和B类相同的方法,把相同的方法抽取出来到C类中,让A类和B类分别继承C类
例子:
public class Father {
public Father() {
// TODO Auto-generated constructor stub
}
public void buyHouse(){
System.out.println("买房子");
}
public void buyCar(){
System.out.println("买车子");
}
}
public void feedChild(){
System.out.println("养孩子");
}
public void teach(){
System.out.println("我会教书!!");
}
Father son1 = new Son1();
//调用父类的方法
//父类的引用指向子类的对象
son1.buyCar();
son1.buyHouse();
System.out.println("******************************");
Son1 s = new Son1();
s.feedChild();
s.teach();
//父类的方法
s.buyCar();
s.buyHouse();
// Father son2 = new Son2();
// //调用父类的方法
// son2.buyCar();
// son2.buyHouse();
2、哪个类的构造方法会先被实例化:
1、越是靠近Object类的对象先被实例化:
2、super关键字:可以调用父类的构造方法/包含有参数和无参数
this():表示本类调用
super可以使用在方法中:super.buyCar();super.方法名();直接调用父类的方法
3、重载和重写:
重载:仅仅在本类中使用 overloading
重写:是在不同的类中使用,而且都是继承关系:覆盖 overwriting
1、参数类型和个数不能改变,名称不能变
2、好处:重新改造父类的方法
3、什么时候需要方法的重写:继承父类的方法,但是需要扩充功能
抽象类:
抽象类:public abstract class 类名
1、为什么会存在抽象类:
类本身不能实现的方法,那么这个类就是抽象类:
抽象类是不能直接new出来的
一个类中如果有抽象的方法,那么这个类必然是抽象类,反之未必成立
2、好处:
1、站在父类的角度可以不用实现该方法,实际编写代码尽量不要声明称抽象的
2、对子类有着指引的作用,如果子类不实现该抽象方法,那么也是抽象类
3、接口:
接口的定义:接口是一个契约,实现类是契约的执行者,接口不是会轻易改变,接口中定义的方法,实现类要坚决执行
使用接口的好处:解决代码耦合度的问题。
关键字:interface
接口中定义的方法都是抽象的:
接口中定义的变量都是静态的
类 implements 接口
接口和抽象类的区别:
抽象类允许有普通方法存在
接口不允许有普通方法存在
抽象类、接口、普通的类的关系:
接口--->>抽象类--->>普通类
为什么要定义成接口:
1、接口不需要实现任何东西,只是给实现类指明方向
2、如果是接口,那么找已知实现类,如果该已知实现类是一个抽象类,找基类
4、多态:
1、什么是多态?一个事物在不同的条件下有多种形态?
2、开发中如何实现多态:实现某一个方法的时候,参数传递一个抽象类或者是接口?
3、使用多态的好处:调用同一个方法,可以实现多种功能?
5、final关键字使用:
1、如果使用final修饰一个变量,那么是常量
2、如果使用final修饰一个方法,该方法不能被重写
3、如果使用final修饰一个类,那么该类不能被继承。
4、如果使用final修饰一个形参,那么该参数不能被修改
------------------------------------------------------------------------------------------------------------------------ 1、异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
异常就是程序出现错误
2、Java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM,
这个过程称为抛出(throw)异常
当JVM接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,
这一过程称为捕获(catch)异常和处理异常。
3、所有的异常信息都是继承Throwable 该对象有两个子类:Error和Exception
Error是不可阻抗的异常,一般不处理
Exception 程序运行的时候出现的异常信息,是我们要处理的
Exception 分为受检测的异常信息和非受检测的异常信息
受检测的异常信息是表示程序还没有执行,就强制处理异常
非受检测的异常信息表示程序在运行的过程中出现错误信息 RuntimeException
处理异常的机制:需要用一个确定类型的异常来捕获异常信息:
try{
如果程序没有异常,那么会执行try中的代码
}catch(异常类型 ){
如果有了异常,会执行catch的代码
}finally{
//不管有没有异常信息,都会执行finally的代码片段
//用于关闭数据的链接,读取文件的形式
}
捕获异常信息的时候要确定要一个精确的类型
记住常用的异常信息:
1、SQLException 数据库异常
2、IOException 读取文件异常
3、ClassNotFoundException 找不到该类的异常
4、NullPointerException 空指针异常信息
5、ArithmeticException 数学运算异常
6、ClassCastException 类型转换异常
7、ArrayIndexOutOfBundsException 数组越界的异常信息
使用throw和throws
throw关键字用在方法代码中主动抛出一个异常
throws用来声明一个方法可能会抛出的所有异常。跟在方法签名的后面
什么时候需要抛出异常信息?
在方法参数传递的过程中,如果出现错误,应该把错误的信息抛给调用该方法的人,
什么时候需要捕获异常信息?
如果程序出错了,不需要把错误信息提示给调用者,
throw和throws 抛出的异常信息的范围,必须要小于等于声明异常的范围
自定义异常信息:
自己定义的异常信息,就是JDK中无法提供的异常机制。
总结:
如何使用异常信息:
1、
-------------------------------------------------------------------------------------------------------------------------------------------------------
1、如何声明数组:
int[] a = new int[4];
2、如何给数组赋值:
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
int[] a = {1,2,3,4,5};
3、数组的特点:
下标从0开始,长度:数组个数-1;
4、如何访问数组:
for(int i=0;i<数组.length();i++)
------------------------------------------------------------------------------------------------------------------------
1、基本数据类型包装类
1、所有基本数据类型都能很方便的和对应的包装类相互转换
2、将基本数据类型包装成对象,可以调用该对象的方法,实现转换功能
3、Integer(int value)
2、字符串的操作:
java.lang.String代表不可变的字符序列。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
因为 String 对象是不可变的,所以可以共享
比较两个对象:
equals和==
equals比较的是值,==比较是地址:
哈希值:表示变量在内存中存储的分布图,值越大,重复几率越小
hashCode相等,equals 相等
equals相等,hashCode不一定相等
字符串的索引值从0开始
---------------------------------------------------------------------------------------------------------------
1、与正则表达式相关的方法
1、主要功能是用来操作字符串的
2、将String str="asd23fasdf23asdfa23sd4fasd4fa45sdf"; 出现数字的字符替换成#
2、什么是转义字符:
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为捕获组
--------------------------------------------------------------------------------------------------------------
1、StringBuffer
一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符到String对象中。
您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String对象。
如果程序对这种附加字符串的需求很频繁,并不建议使用+来进行字符串的串联。
应该使用java.lang.StringBuffer类。
2、StringBuffer 可以实现对字符串的追加,删除、插入、查找、替换
1、实现删除功能:
把所有大写字母删除掉
String str = "abcmGHLnopqrstuvwxyzABCD";
在指定的字符串位置插入特殊的字符
在所有出现a的地方之后插入 #
String str = "asdfasdfasdfasdfasdfasdf";
3、StringBuilder和StringBuffer很类似:
StringBuffer 是线程安全的
StringBuilder 非线程安全 效率高
=------------------------------------------------------------------------------------------------------------------------
1、输入输出流:
主要是对文件进行操作(持久化):
1、读取文件内容、修改文件内容、删除文件(内容)
2、拷贝文件、移动文件 创建文件夹
3、递归文件
4、如果文件类型不一致,读取文件的方式是不同的。
I:InputStream表示输入流,表示要读取文件,需要源路径
O:OutputStream 表示输出流,写文件 需要目标路径
相对路径:是相对于某一个文件夹的路径:
绝对路径:是相对于某一个盘符的路径:
2、java.io.File类:文件系统类:
1、可以读取文件属性:可读、可写、读写
2、删除文件
3、遍历某一个文件夹下的所有文件
4、判断某一个目录下的文件是否存在
5、返回此抽象路径名的绝对路径名字符串
6、 测试此抽象路径名表示的文件是否是一个目录。
7、创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
3、递归遍历文件夹: