更新时间:2022-08-29 10:44:32 来源:极悦 浏览1337次
在这种情况下,我们在声明静态数据成员时创建类的实例,因此类的实例是在类加载时创建的。
让我们看一下使用早期实例化的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天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习