更新時間:2022-08-29 10:44:32 來源:動力節點 瀏覽1718次
在這種情況下,我們在聲明靜態數據成員時創建類的實例,因此類的實例是在類加載時創建的。
讓我們看一下使用早期實例化的Java單例模式的示例。
文件:A.java
A類 {
私有靜態 A obj= new A(); //早期,實例將在加載時創建
私有 A(){}
公共靜態 A getA(){
返回 對象;
}
公共無效 doSomething(){
//寫你的代碼
}
}
在這種情況下,我們在同步方法或同步塊中創建類的實例,因此在需要時創建類的實例。
讓我們看一下使用惰性實例化的單例設計模式的簡單示例。
文件:A.java
A類 {
私有靜態 對象;
私有 A(){}
公共靜態 A getA(){
如果 (obj == null ){
同步(單例。類){
如果 (obj == null ){
obj = new Singleton(); //實例將在請求時創建
}
}
}
返回 對象;
}
公共無效 doSomething(){
//寫你的代碼
}
}
我們將創建一個 JDBCSingleton 類。這個 JDBCSingleton 類包含它的私有構造函數和它自己的私有靜態實例 jdbc。
JDBCSingleton 類提供了一個靜態方法來獲取它的靜態實例給外界。現在,JDBCSingletonDemo 類將使用 JDBCSingleton 類來獲取 JDBCSingleton 對象。
假設:你已經在mysql數據庫中創建了一個包含uid、uname和upassword三個字段的表userdata。數據庫名稱是 ashwinirajput,用戶名是 root,密碼是 ashwini。
文件:JDBCSingleton.java
導入 java.io.BufferedReader;
導入 java.io.IOException;
導入 java.io.InputStreamReader;
導入 java.sql.Connection;
導入 java.sql.DriverManager;
導入 java.sql.PreparedStatement;
導入 java.sql.ResultSet;
導入 java.sql.SQLException;
類 JDBCSingleton {
//步驟1
// 創建一個 JDBCSingleton 類。
//靜態成員只保存一個 JDBCSingleton 類的實例。
私有靜態 JDBCSingleton jdbc;
//JDBCSingleton 防止來自任何其他類的實例化。
私有 JDBCSingleton() { }
//現在我們提供全局訪問點。
公共靜態 JDBCSingleton getInstance() {
如果 (jdbc== null )
{
jdbc=新的 JDBCSingleton();
}
返回 jdbc;
}
// 從插入、視圖等方法獲取連接
私有靜態 連接 getConnection()拋出 ClassNotFoundException、SQLException
{
連接 con= null ;
Class.forName( "com.mysql.jdbc.Driver" );
con= DriverManager.getConnection( "jdbc:mysql://localhost:3306/ashwanirajput" , "root" , "ashwani" );
返回 騙局;
}
//將記錄插入數據庫
public int insert(String name, String pass) 拋出 SQLException
{
連接 c= null ;
PreparedStatement ps= null ;
int 記錄計數器 = 0 ;
試試 {
c=這個.getConnection();
ps=c.prepareStatement( "插入用戶數據(uname,uppassword)values(?,?)" );
ps.setString( 1 , 名稱);
ps.setString( 2 ,通過);
記錄計數器=ps.executeUpdate();
} 捕捉 (異常 e){ e.printStackTrace(); } 最后{
如果 (ps!= null ){
ps.close();
} if (c!= null ){
c.close();
}
}
返回 記錄計數器;
}
//查看數據庫中的數據
公共無效 視圖(字符串名稱) 拋出 SQLException
{
連接 con = null ;
PreparedStatement ps = null ;
結果集 rs = null ;
試試 {
con=這個.getConnection();
ps=con.prepareStatement( "select * from userdata where uname=?" );
ps.setString( 1 , 名稱);
rs=ps.executeQuery();
而 (rs.next()){
System.out.println( "名稱=" +rs.getString( 2 )+ "\t" + "Paasword=" +rs.getString( 3 ));
}
} 捕捉 (異常 e){ System.out.println(e);}
最后{
如果(rs!= null ){
rs.close();
} if (ps!= null ){
ps.close();
} if (con!= null ){
con.close();
}
}
}
// 更新給定用戶名的密碼
公共int 更新(字符串名稱,字符串密碼) 拋出 SQLException {
連接 c= null ;
PreparedStatement ps= null ;
int 記錄計數器 = 0 ;
試試 {
c=這個.getConnection();
ps=c.prepareStatement( " 更新用戶數據設置 uppassword=? where uname='" +name+ "'" );
ps.setString( 1 ,密碼);
記錄計數器=ps.executeUpdate();
} 捕捉 (異常 e){ e.printStackTrace(); } 最后{
如果 (ps!= null ){
ps.close();
} if (c!= null ){
c.close();
}
}
返回 記錄計數器;
}
// 從數據庫中刪除數據
公共int delete( int userid) 拋出 SQLException{
連接 c= null ;
PreparedStatement ps= null ;
int 記錄計數器 = 0 ;
試試 {
c=這個.getConnection();
ps=c.prepareStatement( " 從用戶數據中刪除 uid='" +userid+ "'" );
記錄計數器=ps.executeUpdate();
} 捕捉 (異常 e){ e.printStackTrace(); }
最后{
如果 (ps!= null ){
ps.close();
} if (c!= null ){
c.close();
}
}
返回 記錄計數器;
}
} // JDBCSingleton 類結束
文件:JDBCSingletonDemo.java
導入 java.io.BufferedReader;
導入 java.io.IOException;
導入 java.io.InputStreamReader;
導入 java.sql.Connection;
導入 java.sql.DriverManager;
導入 java.sql.PreparedStatement;
導入 java.sql.ResultSet;
導入 java.sql.SQLException;
類 JDBCSingletonDemo{
靜態整數 計數= 1 ;
靜態整數 選擇;
公共靜態void main(String[] args) 拋出 IOException {
JDBCSingleton jdbc= JDBCSingleton.getInstance();
BufferedReader br= new BufferedReader( new InputStreamReader(System.in));
做{
System.out.println( "數據庫操作" );
System.out.println( " ---------" );
System.out.println( "1.插入" );
System.out.println( "2.查看" );
System.out.println( " 3. 刪除" );
System.out.println( " 4. 更新" );
System.out.println( " 5. 退出" );
System.out.print( "\n" );
System.out.print( "請輸入您要在數據庫中執行的選擇:" );
選擇=整數.parseInt(br.readLine());
開關(選擇){
案例1 :{
System.out.print( "請輸入您要向數據庫插入數據的用戶名:" );
字符串用戶名=br.readLine();
System.out.print( "輸入你要插入數據到數據庫的密碼:" );
字符串密碼=br.readLine();
試試 {
int i= jdbc.insert(用戶名,密碼);
如果 (i> 0 ) {
System.out.println((count++) + "數據插入成功" );
}其他{
System.out.println( "數據未插入" );
}
} 捕捉 (異常 e){
System.out.println(e);
}
System.out.println( "按回車鍵繼續..." );
System.in.read();
} //案例1結束
休息;
案例2 :{
System.out.print( "請輸入用戶名:" );
字符串用戶名=br.readLine();
試試 {
jdbc.view(用戶名);
} 捕捉 (異常 e){
System.out.println(e);
}
System.out.println( "按回車鍵繼續..." );
System.in.read();
} //案例2結束
休息;
案例3 :{
System.out.print( "輸入要刪除的用戶名:" );
int userid=Integer.parseInt(br.readLine());
試試 {
int i=jdbc.delete(userid);
如果 (i> 0 ) {
System.out.println((count++) + "數據刪除成功" );
}其他{
System.out.println( "數據沒有被刪除" );
}
} 捕捉 (異常 e){
System.out.println(e);
}
System.out.println( "按回車鍵繼續..." );
System.in.read();
} //案例3結束
休息;
案例4 :{
System.out.print( "請輸入您要更新的用戶名:" );
字符串用戶名=br.readLine();
System.out.print( "輸入新密碼" );
字符串密碼=br.readLine();
試試 {
int i= jdbc.update(用戶名,密碼);
如果 (i> 0 ) {
System.out.println((count++) + "數據更新成功" );
}
} 捕捉 (異常 e){
System.out.println(e);
}
System.out.println( "按回車鍵繼續..." );
System.in.read();
} // 案例 4 結束
休息;
默認:
返回;
}
} 而 (選擇!= 4 );
}
}
輸出
以上就是關于“Java單例模式代碼示例”介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java視頻教程,里面的課程內容從入門到精通,細致全面,通俗易懂,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習