例如:数据库连接信息写在.java文件中,若是 修改连接信息,就得暂停服务器重新发布
因此 经常变化的信息应写在配置文件中
static{ }代码块 ,也叫静态代码块//当加载类时立即执行
是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次
利用静态代码块可以对一些static变量进行赋值。
public class DBUtil {
private static Properties properties;
private DBUtil(){}//禁止工具类实例化
static{
InputStream inputStream=null;//若无中文字符可以使用字节流读取
try {
properties=new Properties();
//Class clazz=DBUtil.class;
inputStream=DBUtil.class.getResourceAsStream("/resources/db.properties");// '/'表示Classpath路径
//DBUtil.class.getClassLoader().getResourceAsStream("resources/db.properties)//相对路径
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
System.out.println("当前路径:"+new File(".").getAbsolutePath());
System.out.println("用户名:"+properties.getProperty("userName")+" 密码:"+properties.getProperty("password"));
System.out.println(properties);
}
public static String getDBConfig(String key){
return properties.getProperty(key);
}
}
#db.properties
userName=root
password=admin
javac -d . DBUtil.java //-d根据包名生成相应目录
相对路径存在的问题:相对路径是相对于目前执行class文件的时候,控制台所在的路径
javaweb 项目中的 路径
目标资源 target.html
给服务器使用的:/ 表示当前web应用的根目录 WebRoot
给浏览器使用: / 表示在webapps的根目录下
request.getRequestDispatcher("/target.html");
response.sendRedirect("/day11/target.html");//request.getContentPath+"target.html"
<a href="/day11/target.html>test</a>
<form action="/day11/target.html"></from>
//资源文件的绝对路径
String path=this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
FileInputStream in=new FileInputStream(new File(path));
InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop=new Properties();
prop.load(in);
String user=prop.getProperty("user");
JDK 和 JRE 目录在初始安装之后应该保持不动。
com.example或 edu.poly 包名小写,不使用默认包
bin 和 src(一些人更喜欢将其分别命名为 build 和 source)
C:\project> javac -d bin -sourcepath src;c:\demo\src src\com\elharo\gui\MainFrame.java
编译完放到bin目录(direction)下
源文件所在目录src,可以是多个目录,这里包含被MainFrame引用到的.java文件
编译MainFrame.java文件
C:\project> javac -d bin -sourcepath src
-classpath C:\classes;icu4j.jar;E:\lib\junit.jar
src\com\elharo\gui\MainFrame.java
-classpath指定已经编译好的.class文件
运行程序需要指定 类路径、包含 main()方法的类的完全限定包名
C:\project> java -classpath C:\classes;E:\lib\junit.jar com.elharo.gui.MainFrame
ClassLoader.getSystemResourceAsStream() 从加载类的搜索路径指定名称的资源。