1.封装:
<1>.安全性。<2>.实现高内聚,低耦合。<3>.要尽量使类的功能单一。
2.包
提供类的组织管理,提供名称空间。
3.访问限定符。
<1>.默认 在同一个包中可以访问,但是在其它包中则不可见。
<2>.public 公开属性和方法。一般的public的方法咱们可以叫他为接口。
<3>.private 隐藏属性和方法,只能在类内访问。
<4>.protected 保护型,只有自己的子类或友元等访问。
4.POJO类:没有业务逻辑功能。可以传递数据,可以做成实体类。
5.包装类(Wrapper)
是对基本数据类型的包装。对基本数据类型提供一些方法。
装箱:Integer i=new Integer(1);
拆箱:int j=i.intValue();
jdk5.0以后提供了自动装箱拆箱功能。
Integer i=1; int j=i;
在老板中必须这样作: Integer i=new Integer(1); int j=i.intValue();
注意问题:这样做了进行比较时==号一定要比较基本数据类型而不是包装类。
6.不变模式 Immutabel
只读方法,没有提供写方法。数据一旦指定,不能再修改。解决多线程并发下,数据安全的问题。String和所有包装类都是采用不变模式。
问题:数据拼接时产生问题。例字符串追加:+,StringBuffer,StringBuilder。
用+号产生无用对象,浪费大量存储空间。效率很低。
用StringBuffer();实际上是数组。开始分配了一段空间,且大小可以指定。效率比+号高的多,且是线程安全的。
即有多个线程同时对其追加的话可以保证先后顺序和数据准确性,所以有时间片的分配问题。线程可能会等待,不能一次性完成,但是效率低一些。适用成员变量和静态变量。
用StringBuilder();效率高,但不是线程安全的,没有加锁。适合于单线程和局部变量。
7.继承
java中只有单继承,多继承只能通过接口。另外如果要实现代码重用的话,最好是利用一个公共类的静态方法。
如果通过继承的话会继承一些其它无用的方法。
8.final
final放到类名前,表示该类不能被继承(终太类)。
final放到方法名前,表示该方法不能被子类方法覆盖。
9.super();
在子类中可以通过super()来访问父类的构造方法。还可以用:super.方法(),super.属性.来进行操作。
10.protected:
在类内,子类,同一包中的类可以访问。
11.Override可翻译成覆盖、重写、重置、重定义、替换。
表示子类的定义了方法,其声明和父类方法相同;子类的方法优先级高于父类方法;相当于将父类的方法取代。
注意:重载只能针对非静态方法。
12.构造方法特点:当泪中一个构造方法都没有时,java会生成默认构造方法。但是一旦你有了自己定义的构造方法,则java不会自动替你生成默认的构造方法,所以在继承时构造方法要显示的调用。所以如果你不想用默认构造方法的话必须用super();来显示调用。
13.Object是所有类的父类。toString:return getClass().getName()+"@"+Integer.toHexString(hashCode());输出包名和哈希码。
finalize():实现了首尾工作的方法,当一个对象销毁时jva优先执行finalize()方法的定义,可以这样写:
protected void finalize() throws Throwable{System.out.print("finalize");}则当程序执行完时会自动执行该方法进行清理。
14.一个模拟数据库增删改查的例子:
共5个类,User 类封装数据,Controller类控制操作,DeleteUserCmd封装删除操作,QueryUserCmd封装查询操作,UpdateUserCmd封装更新操作,AddUserCmd封装添加操作,每个类的源码如下:
<1>.User类
public class User {
private String userId=null;
private String userName=null;
private String passWord=null;
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String toString(){
return "userId="+userId+"/n"+"userName="+userName+"/n"+"passWord="+passWord;
}
}
<2>.AddUserCmd类
public class AddUserCmd {
public int addUser(User user) {
int succ = 0;
String userId = user.getUserId();
String userName = user.getUserName();
String passWord = user.getPassWord();
System.out.println("添加用户成功");
succ = 1;
return succ;
}
}
<3>.DeleteUserCmd类
public class DeleteUserCmd {
public int delUser(String userId) {
int succ = 0;
System.out.println("删除用户成功");
succ = 1;
return succ;
}
}
<4>.QueryUserCmd类
public class QueryUserCmd {
public User queryUser(String userId) {
User user = null;
user = new User();
user.setUserId("userId");
user.setUserName("userName");
user.setPassWord("passWord");
return user;
}
}
<5>.UpdateUserCmd类
public class UpdateUserCmd {
public int updateUser(User user) {
int succ = 0;
String userId = user.getUserId();
String userName = user.getUserName();
String passWord = user.getPassWord();
System.out.println("用户更新成功");
succ = 1;
return succ;
}
}
<6>.Controller类
import javax.swing.JOptionPane;
public class Controller {
/**
* @param args
*/
public static void main(String[] args) {
User user = new User();
user.setUserId("userId");
user.setUserName("userName");
user.setPassWord("passWord");
String command=JOptionPane.showInputDialog("请输入命令");
if(command.equals("a")){
AddUserCmd addUser=new AddUserCmd();
addUser.addUser(user);
}
if(command.equals("a")){
}
if(command.equals("d")){
DeleteUserCmd deleteCmd=new DeleteUserCmd();
deleteCmd.delUser("1");
}
if(command.equals("u")){
UpdateUserCmd updateCmd=new UpdateUserCmd();
updateCmd.updateUser(user);
}
if(command.equals("q")){
QueryUserCmd queryCmd=new QueryUserCmd();
User u=null;
u=queryCmd.queryUser("1");
System.out.println(u);
}
}
}
通过上面例子,我们掌握了一种设计数据库操作的方法,明天将利用这个例子来实现多态。