1,Java開發環境搭建
常用DOS指令
d: 通路D盤
cd + 檔案名 通路該檔案
cd.. 通路上一級
cd\ 傳回到目前盤符根目錄下
cla 清除螢幕
dir 顯示目前目錄下的檔案和子目錄資訊
Java開發環境(JDK)
如何校驗JDK安裝是否成功的方法。你無需了解為什麼要這麼做,隻需要嚴格按照下面的步驟操作即可:
1. 在鍵盤上按:WIN+R鍵,這時會彈出運作視窗;
2. 在運作視窗中輸入:CMD,按“确定”按鈕,這時會彈出DOS視窗;
3. 在DOS視窗中輸入:JDK安裝路徑\bin\java.exe。
一些常用的存儲機關:
1B(位元組) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
需要注意:
(1) Java 嚴格區分大小寫
(2) main 是程式的主方法,程式入口
(3) a++ ++,--運算符後置時,先使用變量a原有值參與運算操作,運算操作完成後,變量a的值自增1或者自減1;
++a ++,--運算符前置時,先将變量a的值自增1或者自減1,然後使用更新後的新值參與運算操作
&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式
(4) 【cmd下javac 錯誤: 編碼GBK的不可映射字元】
在cmd視窗下執行javac指令是,寫為javac -encoding utf-8 -d. 檔案名
-encoding utf-8 -d.
(5) 【輸出那裡,不要随便空格】
(6) 引用資料類型(如Scanner):
1導包:import java.util.Scanner;
2建立對象執行個體:Scanner sc = newScanner(System.in);
3調用方法:
int i =sc.nextInt(); 用來接收控制台錄入的數字
Strings = sc.next(); 用來接收控制台錄入的字元串
(7) continue語句用在循環語句中,它的作用是終止(跳過)本次循環,執行下一次循環。break結束目前循環; contiune 跳出本次循環
(8) switch 沒有break的話,會按順序一直執行
(9) 數字中包含7 : String.valueOf(a).contains("7")
(10) 自定義的引用類型,每次new 都會在堆中開辟一片記憶體空間
(11) 數組 length ArrayList 集合 .size( ) (資料任意的添加和删除) 字元串 .length( )
(12) 強制類型轉型 int a = 9; char b = (char)a;
1) Eclipse 快捷鍵:
2) 内容輔助鍵 Alt+/
3) 自動補齊main方法 main 然後 Alt+/
4) 自動補齊輸出語句 syso 然後 Alt+/
5) 格式化Ctrl+Shift+f
6) 代碼區域右鍵 --Source – Format
7) 自動導包:Ctrl+Shift+o
8) 如果目前類在多個包中都存在,這時候,使用Ctrl+shift+o,進行選擇一個包導入即可。
9) 注釋
10) 單行注釋
11) 加注釋: 先選中需要注釋的内容,然後 Ctrl+/
12) 取消注釋:先選中需要取消注釋的内容, 然後 Ctrl+/
13) 多行注釋
14) 加注釋: 先選中需要注釋的内容,然後 Ctrl+Shift+/
15) 取消注釋:先選中需要取消注釋的内容, 然後 Ctrl+Shift+\
(13) Ctrl + alt + 下箭頭 複制這行代碼
(14) //調用父類已經存在的功能使用super super.showNum(); 在子類重寫這個(和父類的方法是同一個名字)的方法時,在方法類加上(super.方法名())
(15) 多态:普通,抽象,接口。 運作的都是子類定義的方法
成員變量:定義和引用都看父類
方法運作看子類,但是父類也要有定義
靜态方法看父類 靜态屬于類,和對象無關
(16) 類實作(implements)接口,接口繼承(extends)多個接口
(17) 每個類都有它的構造方法
(18) Ctrl +t 檢視繼承關系
(19) Final 不可變 不能被繼承 除構造方法 都能修飾
(20) 類的方法中沒有 非靜态 就得加靜态static
在類裡面,如果方法沒有涉及到 成員變量,那就應該加靜态 static
靜态變量或方法 直接用接口或者類名 調用
(21) 導包 ctrl shift + o 類的全名帶着包
(22) Protected 權限的類 中的方法 或 參數,隻能被子類在子類中用
(23) 我們想在類中定義一個靜态常量,通常使用public static final修飾的變量來完成定義。此時變量名用全部大寫
如:public static final 資料類型 變量名 = 值;
public static final String COMPANY_NAME= "傳智播客";
使用類的靜态成員時,不需要建立對象,直接使用類名來通路即可
如:Company.COMPANY_NAME
(24) Instanceof 如: obj instanceof Person 判斷obj是否為Person 類型
(25) Char 做運算都是先轉INT 如:97 = ‘A’ char 記得單引号 ‘ ’
(26) StringBuffer 線程安全,但速度慢。是以,我們用StringBuilder 速度快,不管安全
(27) String 的一些用法:
String1.contains("end") String1中是否包含end
str1.indexOf(str2) str1 中包含 str2 ,str2 在 str1 中的索引位置
(28) 正則: ^ 表示“異或” . 表示任意字元
Matches split replaceAll()
\\ 表示把後面的 符号 轉為 正常表示的符号
如:. 在正則中表示任意字元,\\ . 則僅表示為一個點
(29) 有異常 ctrl 1
(30) 毫秒 1000毫秒 = 1秒
毫秒到天數的換算: 毫秒/1000/60(一分鐘60秒)/60(一小時60分鐘)/24(一天24小時)
轉換為毫秒值 Date date = new Date();
long time = date.getTime();
(31) 轉 string 直接 String s = I +“ ” 就可以了
也可以用 String s3 = String.valueOf(a);
String s2 = Integer.toString(i,2);
String 轉 char char[] c= s.toCharArray();
String 轉 byte “sfsfsf”.getBytes();
(32) Integer i = 127; Integer j = 127; 這個,如果是127以内的數字,虛拟機不會新new 一個對象,而是讓 j = i
如果是128及以上的數字,就會重新 new 出一個對象
(33) System.arraycopy(arr1, 2, arr2, 1,3);
複制數組:把 arr1 的元素從索引為2的開始,複制到arr2的索引1的後面,複制3個
(34) 集合存對象的時候:當列印array.get[i] 時,實際上列印的是array.get[i] 這個對象的.toString( ) 我們可以在這個對象的類中,改寫toString( )
(35) 增強for循環 For( int I : arr ) 周遊arr 數組,不改資料
(36) 泛型:像ArrayList<String> arr = new ArrayList<String>(); 這種,後面需要指明類型的
(37) 疊代器:itrator ollectioncoll = new ArrayList(); Iterator it = coll.iterator();
(38) 泛型的通配符 <?> 限定繼承的父類(上限) <? Extends Person >
限定該子類的父類(下限) <? Super Person >
(39) 數組操作: int[] i = {12,4,34,67,3,43};
String s = Arrays.toString(i);
(40) Set<String> set = new HashSet<String>();
Set 無序,無重複元素,隻能用疊代器和增強for 循環來周遊
(41) String 大小寫轉換 String start =sWord[i].substring(0, 1).toUpperCase();
Stringend = sWord[i].substring(1).toLowerCase();
(42) 可變參數(本質是數組),随便傳幾個:Function(int…a){ }
一個方法中隻能有一個可變參數;可變參數隻能放在參數清單最後
(43) 異常: throw new RuntimeException("run");
RuntimeException 不用在方法的尾巴上加 throws RuntimeException了
如:public static int get(int[]arr) throws Exception{ }
(44) 遞歸: 構造方法禁止遞歸
(45) 位元組流:換行:\r\n (寫在上一句的結尾,或者,下一句的開頭)
字元流:換行:FileWriter fw.newLine(); (具有平台無關性)
(46) 位元組流的異常處理:
FileOutputStreamfos = null;
try{
fos= new FileOutputStream("d:\\a.txt");
fos.write('p');
byte[]b = "asdf".getBytes();
fos.write(b);
}catch(IOException ex){
System.out.println(ex);
thrownew RuntimeException("檔案寫入失敗");
}finally{
try{
if(fos!=null)
fos.close();
}catch (IOException e) {
thrownew RuntimeException("關閉資源失敗");
}
}
(47) fos = newFileOutputStream("d:\\a.txt",true); 給該文本檔案續寫資料
fos.write('p');
(48) 轉換嗎?轉換流。InputStreamReaderOutputStreamWriter
高效嗎?緩沖區對象。BufferedXXX
InputStream
FileInputStream
BufferedInputStream
OuputStream
FileOutputStream
BufferedOuputStream
Writer
OutputStreamWriter
FileWriter à fw.flush();
BufferedWriter
Reader
InputStreamReader
FileReader
BufferedReader à特有功能:br.readLine() 可以讀出檔案的一行
(49) 靜态方法不允許 通路 非靜态。靜态方法裡面不能寫,this,super
(50) MySQL auto_increment 自動增長
(51)
JDBC操作資料庫的步驟
1.注冊驅動
告知JVM使用的是哪一個資料庫的驅動
Class.forName("com.mysql.jdbc.Driver");
2.獲得連接配接
使用JDBC中的類,完成對MySQL資料庫的連接配接
url:"jdbc:mysql://localhost:3306/day07"
Connection con = DriverManager.getConnection(url,username, password);
3.獲得語句執行平台
通過連接配接對象擷取對SQL語句的執行者對象
PreparedStatement pst = con.prepareStatement(sql);
4.執行sql語句
使用執行者對象,向資料庫執行SQL語句
擷取到資料庫的執行後的結果
ResultSet rs = pst.executeQuery(); 或者 pst.executeUpdate();
5.處理結果
rs.close();
stat.close();
con.close();
6.釋放資源 一堆close()
使用 properties 配置時,該檔案要放在src 下面
(52) Alt + shift + m 把抽取的代碼放進一個方法中
(53) Ctrl + 2 調用的一個新的方法,左邊“ 類名 自己取的名字“ 會自動出現
(54) 用 resourceBundle 取properties 檔案中的值,properties 的key命名首字母小寫
塊編輯 alt + shift + a 全變大寫 Ctrl + shift + x 全變小寫 Ctrl + shift + y
(55) Class 裡面的常量 命名要全部大寫
(56) 127.0.0.1 本機位址
(57) Tomcat 部署
釋出:在底下server部分中,右鍵選 add and remove
(58)
(59)
(60)
(61)
(62)
(63)
(64)
(65)
(66)
(67)
2-----------------資料庫連接配接-----------------------------
JDBC(配置檔案àJDBCUtils類連接配接資料庫à使用JDBCUtils操作)
導包:mysql-connector-java-5.1.39-bin.jar |
步驟一:建立Java項目,引入mysql的驅動包. 步驟二:編寫程式 步驟三:注冊驅動 步驟四:獲得連接配接 步驟五:執行SQL 步驟六:釋放資源 |
配置檔案 (jdbc.properties) |
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///day07 (或url=jdbc:mysql://localhost:3306/base1) username=root password=root |
步驟:注冊驅動à擷取連接配接à釋放驅動 |
JDBCUtils類 |
1,定義 |
static final String DRIVERCLASS; static final String URL; static final String USERNAME; static final String PASSWORD; |
2,從jdbc.properties擷取資料 |
static{ //擷取資料 ResourceBundle rb = ResourceBundle.getBundle("jdbc"); DRIVERCLASS = rb.getString("driverClassName"); URL = rb.getString("url"); USERNAME = rb.getString("username"); PASSWORD = rb.getString("password"); } |
3,擷取驅動 |
static{ try { //擷取驅動 Class.forName(DRIVERCLASS); } catch (ClassNotFoundException e) { e.printStackTrace(); } } |
4,連接配接資料庫 |
public static Connection getConnection(){ try{ //連接配接資料庫 Return DriverManager.getConnection(URL,USERNAME,PASSWORD); }catch(Exception ex){ System.out.println(ex+".222"); throw new RuntimeException(); } } |
5,釋放連接配接,關閉 |
public static void close(Connection con,PreparedStatement pre,ResultSet rs){ conClose(con); preClose(pre); reClose(rs); } public static void conClose(Connection con){ if(con != null){ try{ con.close(); }catch(Exception ex){ ex.printStackTrace(); } } } |
測試:
Connection con = JDBCUtils.getConnection(); String sql = "select * from student"; PreparedStatement pre = con.prepareStatement(sql); ResultSet re = pre.executeQuery(); while(re.next()){ System.out.println(re.getString("name")); } |
連接配接池操作(常用連接配接池:DBCP,C3P0)
DBCP:(了解) apache組織
1.導入jar包:commons-dbcp-1.4.jar和commons-pool-1.5.6.jar |
2.使用api a.寫死 //建立連接配接池 BasicDataSource ds = new BasicDataSource(); //配置資訊 ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql:///day07"); ds.setUsername("root"); ds.setPassword("1234"); b.配置檔案 實作編寫一個properties檔案 //存放配置檔案 Properties prop = new Properties(); prop.load(new FileInputStream("src/dbcp.properties")); //設定 //prop.setProperty("driverClassName","com.mysql.jdbc.Driver"); //建立連接配接池 DataSource ds = new BasicDataSourceFactory().createDataSource(prop); |
C3P0
導包: c3p0-0.9.1.2.jar |
ComboPooledDataSource bs = new ComboPooledDataSource("mydemo"); Connection conn = bs.getConnection(); String sql = "insert into student values(?,?)"; PreparedStatement pre = conn.prepareStatement(sql); pre.setInt(1,8); pre.setString(2, "bob"); int i = pre.executeUpdate(); System.out.println(i); |
配置檔案:c3p0-config.xml |
<c3p0-config> <!-- 預設配置,如果沒有指定則使用這個配置 --> <default-config> <!-- 基本配置 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/base1</property> <property name="user">root</property> <property name="password">root</property> <!--擴充配置--> <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </default-config> <!-- 命名的配置 --> <named-config name="mydemo"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/base1</property> <property name="user">root</property> <property name="password">root</property> <!-- 如果池中資料連接配接不夠時一次增長多少個 --> <property name="acquireIncrement">5</property> <property name="initialPoolSize">20</property> <property name="minPoolSize">10</property> <property name="maxPoolSize">40</property> <property name="maxStatements">20</property> <property name="maxStatementsPerConnection">5</property> </named-config> </c3p0-config> |
DBUtils: QueryRunner QueryRunner
update(String sql, Object... params) ,執行更新資料
query(String sql, ResultSetHandler<T> rsh, Object... params) ,執行查詢
重要的結果集處理類:BeanHandler,BeanListHandler,MapListHandler,ScalarHandler
closeQuietly(Connectionconn) 關閉連接配接,如果有異常try後不抛。
是apache組織的一個工具類,jdbc的架構,更友善我們使用
使用步驟: 1.導入jar包(commons-dbutils-1.4.jar) 2.建立一個queryrunner類 queryrunner作用:操作sql語句 構造方法: new QueryRunner(Datasource ds); 3.編寫sql 4.執行sql query(..):執行r操作 update(...):執行cud操作 |