一些java注意的地方,应付用

本文深入讲解Java中的单例模式、异常处理、集合关系、AJAX技术、排序算法、数据库操作等关键技术,帮助读者掌握Java开发的核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

★单例Singleton
懒汉式:

代码:
public class Singleton {
private static Singleton instance = null;

private Singleton() {};
public static synchronized Singleton getInstance() {
  if(instance == null) {
   instance = new Singleton ();
  }
  return instance;
}
}

饿汉式:

代码:
public class Singleton {
private static Singleton instance = new Singleton ();

private Singleton() {};
public static synchronized Singleton getInstance() {
  return instance;
}
}

------------------------------------------------------------------------------------------------------------------
★写出几个常见的异常
NullPointerException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
ClassNotFoundException
FileNotFoundException
ClassCaseException
NumberFormatException
NoSuchMethodException
IOException
SQLException
HibernateException
------------------------------------------------------------------------------------------------------------------
★组合,聚合,关联

代码:
public class User {
private String name;
private Address addr;
public void setAddr(Address addr) { //普通关联
  this.addr = addr;
}
public User(Address addr) { //聚合
  this.addr = addr;
}
public User(String city, String zipCode) { //组合
  addr = new Address(city, zipCode);
}
}
public class Address {
private String city;
private String zipCode;
public Address(String city, String zipCode) {
  this.city = city;
  this.zipCode = zipCode;
}
}

继承关系: is a
整个类图共用一张表
每个子类关系一张表
每个类一张表
关联关系:
普通关联:use a 7(种),单双项
聚合:has a
组合:has a
------------------------------------------------------------------------------------------------------------------
★主动方,从动方
对于一对一关系,主动方为关系拥有方(外键)
对于一对多关系,主动方永远是一的一方
对于多对一关系,主动方永远是多的一方
对于一对多或多对一,外键永远在多的一方
对于多对多关系,哪一方都可以作为主动方(自己选择)
mappedBy在双向关系中必须设置,设置在非外键拥有方(若有中间桥表(有默认的设置),主动方或从动方中设置都可以)
cascade(DML都是对主动方进行操作,级联到从动方),及fetch设置在主动方
对于多对多关系,不管是单向还是双向,自动都会引入中间表
------------------------------------------------------------------------------------------------------------------
★AJAX核心代码,异步

 
代码:
var xmlHttp =  new ActiveXObject("Msxml2.XMLHTTP");
   xmlHttp.open("POST", "p2.jsp", true);
   xmlHttp.onreadystatechange = function(){
    alert(xmlHttp.readyState);
    if(xmlHttp.readyState == 4) {
     alert(xmlHttp.responseText);
    }
   }
   xmlHttp.send();

------------------------------------------------------------------------------------------------------------------
★排序
1.冒泡法(BubbleSort)

代码:
public class BubbleSort {
public static void sort(int[] data) {
  int t = 0;
  for(int i = 0; i < data.length; i++) {
   for(int j = data.length - 1; j > i; j--) {
    if(data[j] < data[j-1]) {
     t = data[j];
     data[j] = data[j-1];
     data[j-1] = t;
    }
   }
  }
}

public static void main(String[] args) {
  int[] test = {5, 8, 6, 7, 4, 2, 9, 3, 1};
  sort(test);
  for(int i = 0; i < test.length; i++) {
   System.out.print(test[i] + " ");
  }
}
}

2.快速排序()

 
代码:
public class QuickSort {
public void sort(int[] data) {
  quickSort(data, 0, data.length-1);
}

private  void quickSort(int[] data, int i, int j) {
  int pivotIndex = (i+j)/2;
  swap(data, pivotIndex, j);
  
  int k = partition(data, i-1, j, data[j]);
  swap(data, k, j);
  if((k - i) > 1) {
   quickSort(data, i , k-1);
  }
  if((j - k) > 1) {
   quickSort(data, k+1 , j);
  }
}

private int partition(int[] data, int l, int r, int pivot) {
  do {
   while(data[++l] < pivot);
   while((r != 0) && data[--r] > pivot);
   swap(data, l, r);
  } while(l<r);
  swap(data, l, r);
  return l;
}

private void swap(int[] data, int i, int j) {
  int t = 0;
  t = data[i];
  data[i] = data[j];
  data[j] = t;
}

public static void main(String[] args) {
  int[] test = {5, 8, 6, 7, 4, 2, 9, 3, 1};
  QuickSort qs = new QuickSort();
  qs.sort(test);
  for(int i = 0; i < test.length; i++) {
   System.out.print(test[i] + " ");
  }
}
}

快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点
把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点
递归地使用快速排序方法对left 进行排序
递归地使用快速排序方法对right 进行排序
所得结果为l e f t + m i d d l e + r i g h t
------------------------------------------------------------------------------------------------------------------
★事务
原子性:一个事务包含多个操作,要么同时成功,要么同时失败.
一致性:比如银行转帐,要保证2个帐户的余额总和不变.
隔离性:事务中的操作不能影响其他事务的操作.
持久性:一个事务中的操作,要么被丢弃,要么被持久化到数据库.
原子性,一致性,持久性通过日志文件来保证.隔离性通过锁机制来保证.
隔离级别:0,1,2,4,8 隔离级别越高性能越低
oracle,mysql默认的隔离级别是2 不允许脏读
脏读:读到了别人没有提交的数据.
不可重复读:两次读到的同一条数据结果不一致. DML
幻影读:两次读到的记录条数不一致.  DDL
DCL:Data Controlling Language 数据控制语句
DDL:Data Definition Language 数据定义语句
DML: Data Manipulate Language 数据操作语句
------------------------------------------------------------------------------------------------------------------
★分页查询

代码:
select * from (
select rownum rw,a1.* from (
  select * from s_dept order by id
) a1
) a2
where a2.rw between 8 and 10;

------------------------------------------------------------------------------------------------------------------
★JDBC六大步骤:

代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
  Connection con = null;
  Statement stm = null;
  ResultSet rs = null;
  try {
   //1.注册驱动程序
   Class.forName("oracle.jdbc.driver.OracleDriver");
  } catch (ClassNotFoundException e) {
   System.out.println("--注册驱动失败,请检察是否加入了相关的驱动包到classpath--");
   e.printStackTrace();
  }
  
  try {
   String url = "jdbc:oracle:thin:@192.168.0.206:1521:tarena";
   String user = "asd0803";
   String passwd = "asd0803";
   String sql = "select * from yanght_user";
   //2.获取数据库的连接
   con = DriverManager.getConnection(url, user, passwd);
   //3.创建SQL的执行环境
   stm = con.createStatement();
   //4.执行SQL
   rs = stm.executeQuery(sql);
   //5.处理结果集
   //注:结果集刚创建时指向第一行的前一个位置
   while(rs.next()) {//如果有下一行则返回TRUE
    int id = rs.getInt(1);
    String name = rs.getString(2);
    String pwd = rs.getString(3);
    String status = rs.getString(4);
    System.out.println(id + "/t" + name + "/t" + pwd + "/t" + status);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    //6.释放资源
    if(rs != null) {
     rs.close();
     rs = null;
    }
    if(stm != null) {
     stm.close();
     stm = null;
    }
    if(con != null) {
     con.close();
     con = null;
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
}
}

------------------------------------------------------------------------------------------------------------------
★网络,IO Socket编程

代码:
public class TCPServer {
public static void main(String[] args) throws IOException {
  ServerSocket ss = new ServerSocket(8888); //端口号要大于1000;1000以内系统端口
  System.out.println("服务端已启动");
  
  while(true) {
   Socket s = ss.accept(); //接受 端口8888上的数据,如果没有数据过来,程序阻塞
   InputStream is = s.getInputStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   String con = "";
   while((con = br.readLine()) != null) {
    System.out.println(con);
   }
   br.close();
  }
}
}
public class TCPClient {
public static void main(String[] args) throws UnknownHostException, IOException{
  while(true) {
   Socket s = new Socket("127.0.0.1", 8888);
   OutputStream os = s.getOutputStream();
   BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
   
   InputStream is = System.in;
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   
   String str=br.readLine();
   bw.write(str);
   
   bw.close();
  }
}
}

------------------------------------------------------------------------------------------------------------------
★CRUD(增查改删)
CRUD是一个数据库技术中的缩写词,它代表创建,读取,更新和删除操作。
C:Create new records
R:Retrieve existing records
U:Update existing records
D:Delete existing records
------------------------------------------------------------------------------------------------------------------
★OOA,OOD,OOP,AOP
OOA: Object-Oriented Analysis:面向对象分析方法
OOD: Object-Oriented Design: 面向对象设计
OOP: Object-Oriented Programming:面向对象编程
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程
------------------------------------------------------------------------------------------------------------------
★封装,继承,多态
封装 (encapsulation)
隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.
封装 (encapsulation)
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。
封装的大致原则
1把尽可能多的东西藏起来.对外提供简捷的接口.
2把所有的属性藏起来.
“继承”(Inheritance)
java语言中不支持多重继承,是通过接口实现多重继承的功能。
如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。
继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。
在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能
多态(Polymorphism)
运行时多态:重载(Overloading)
编译时多态:重写(Overriding)
------------------------------------------------------------------------------------------------------------------
★Struts、spring、Hibernate
框架简化开发过程,提供公共服务和便利的工具
spring 是一个业务层框架
struts 是表现层框架
hibernate 是持久层框架
------------------------------------------------------------------------------------------------------------------
JavaBean
按着Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:
1. 可以实现代码的重复利用
2. 易编写、易维护、易使用
3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。
一般来说,实现了如下3条规范的java类我们就称之为javabean,最广义的规范只有第1条,必须具备无参构造器,狭义的是5条规范..我忘记了后2条~
规范:
1.无参构造器
2.setter/getter方法
3.实现serializable接口
4.
5.
------------------------------------------------------------------------------------------------------------------
★EJB, RMI/IIOP、JNDI、JMS、JTA 、JAF
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
------------------------------------------------------------------------------------------------------------------
★关于SSH架构的简单总结
Struts、spring、Hibernate在各层的作用
1)struts 负责 web层.
ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forward到对应的网页。 在struts-config.xml中定义, ActionServlet会加载。

2)spring 负责业务层管理,即Service(或Manager).
1. service为action提供统计的调用接口,封装持久层的DAO,。
2.可以写一些自己的业务方法。
3.统一的javabean管理方法
4.声明式事务管理
5.集成Hiberante

3)Hiberante,负责持久化层,完成数据库的crud操作
hibernate 为持久层,提供 OR/Mapping。
它有一组 .hbm.xml文件和 POJO,是跟数据库中的表相对应的。然后定义DAO,这些是跟数据库打交道的类,它们会使用PO。

在struts+spring+hibernate的系统中,
对象的调用流程是:jsp-> Action-> Service ->DAO ->Hibernate。
数据的流向是 ActionFormBean接受用户的数据,Action 将数据从 ActionFromBean 中取出,封装成VO或PO, 再调用业务层的Bean类,完成各种业务处理后再forward。而业务层Bean收到这个PO对象之后,会调用DAO接口方法,进行持久化操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值