JAVA基础总结
JAVA的OOP思想
一.什么是对象?
- 组成客观世界的事物,成为对象。
- 对象是具体的
- 对象拥有行为(Java中叫方法)和属性
二.什么是类?
- 类是对具有相同属性和行为的对象的抽象。
- 对象是类的具体实例
- 类其实本质就是一种自定义数据类型,它的变量成为对象
三.面向对象的三大特征?
-
封装: 将类封装起来,只提供想提供的方法接口,而不需要提供具体实现细节,这样一来使得程序更加健壮。
-
继承:继承是面向对象的三大特征之一,也是实现软件复用的重要手段,继承是使用已存在的类的定义作用为继承建立新类的技术,新的定义可以增加新的属性或新的方法,也可以用父类的属性和方法。
java是单继承的,只有一个直接父类,但可以有对讴歌间接父类。 作用:能够非常容易地复用以前的代码,大大缩短开发周期,降低开发费 -
多态:子类对象可以直接赋值给父类的引用,但如果子类重写了父类的方法,则在运行时执行子类的代码,实现子类的行为.
四.面向对象与面向过程的区别?
面向过程:
1.以函数为中心,数据为函数服务
2.通过调用函数完成功能
面向对象:
1.以数据为中心,方法为数据服务。
2.通过调用对象的方法完成功能。
五.对象的初始化顺序?
1.实例化对象时,默认初始化值。
2.声明对象时,初始化对象。
3.初始化 块(静态块优先。然后初始化。)
4.构造方法初始化。
六.什么是抽象类?作用是什么?
-
抽象类不能被实例化.
-
当父类的一些方法表现不确定时,可以用abstract官架子来修饰该方法, 抽象方法。
-
包含了抽象方法的类就是抽象类,抽象类也是用abstract来修饰类,抽象类。
-
抽象方法可以不要方法体,其子类完成方法,抽象方法必须抽象类来实现。
-
抽象类的子类必须实现抽象发法,除非,子类也是抽象类。
抽象类作用:
1.就是用来被其他子类继承的。
2.用来规范子类的行为,是为了强制子类来实现多态。(重点理解)
七.什么是接口? -
解决Java的单继承问题,使用接口可以多继承。。
-
接口是抽象方法和静态常量的集合(接口相当于就是一种特殊的抽象类)
-
只能包含抽象方法和静态常量,没有变量和普通方法的实现。
-
接口相当于一种规范,定义好规范之后,就应该有类来遵守(实现)这个规范(接口)。
-
接口中定义的量一定是静态常量。所以可以省略public static final关键字。
-
接口中定义的方法一定是抽象方法,所以可以将public abstract省略。
-
java类可以实现(implements)接口,实现类必须实现接口中定义的说有方法。
-
一个类可以实现多个接口,用 “,”隔开。
-
一个接口也可以被多个类来实现。 不需要考虑类之间的继承关系。
八.接口和抽象类的比较
-
相同之处:
1.接口是特殊的抽象类。
2.都不能创建对象。
3.都可以包含抽象方法。 -
不同之处:
1.抽象类可以包含普通方法,和普通(变,常)量。
2.一个类只能继承一个抽象类,但可以实现多个接口。(既可以继承又可以实现接口。先继承,后实现接口。)
九.接口继承接口形成扩展接口
-
一个类实现多个接口,必须使用类的对象去调用方法,而不能使用接口去调用方法,这样不面向接口编程,程序的多态性就得不到充分的体现。
-
通过接口继承接口,来形成扩展接口,再类来实现这个扩展接口,就可以直接实例化来形成多态。这就是面向接口编程。(通过接口来实现多态。)
JDBC
jdbc连接数据库的步骤
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
•连接URL定义了连接数据库时的协议、子协议、数据源标识。
•书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
3、创建数据库的连接
•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和
密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}
4、创建一个Statement
•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的
语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){ e.printStackTrace() ; } }
web开发基础
框架封装基础
一.注解
是Java5引入的一种代码辅助工具,他的核心作用是对类、方法、变量、参数、和包进行标注,通过反射来访问这些标注信息,以此在运行时改变锁标注对象的行为。Java中的注解由内置注解和元注解组成.
注解与注释
1.Java注解又称Java标注,是Java语 言5.0版本开始支持加入源代码的特殊语法元数据。
2.普通的注释在编译后的class文件中不存在的.
3.而注解附加的信息则根据需要可以保存到class文件中,甚至运行期加载的Class对象中。.
二.创建注解
public @interface AnnotationName{}
元注解
@Retention
定义注解的生命周期
source->class->runtime
@Documented
文档注解,会被Javadoc工具文档化
@Inherited
是否让子类继承该注解
@Target
描述了注解的应用范围
Type
表示可以用来修饰类、接口、注解类型或枚举类型
PACKAGE
可以用来修饰包
PARAMETER
可以用来修饰参数
ANNOTATION_TYPE
可以用来修饰注解类型
METHOD
可以用来修饰方法
FIELD
可以用来修饰属性
CONSTRUCTOR
可以用来修饰构造器
LOCAL_VARIABLE
可以用来修饰局部变量
三.反射
在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;对任意一个对象都能调用它的任意一个方法和属性;对这种动态获取的信息及动态调用对象的方法的功能称为Java语言的反射.
反射的优缺点:
➢通过反射可以使程序代码访问装载到JVM中的类的内部信息,获取已装载类的属性信息,获取已装载类的方法,获取已装载类的构造方法信息.
➢反射提高了Java程序的灵活性和扩展性,降低耦合性,提高自适应能力。
➢反射会对性能造成-定的影响,同时让代码的可读性变低
Class.forName(String)
获取类的元信息 入参:当前类文件的具体位置
类.getClass()
获取类的元信息
clz.getDeclaredFields()
获取当前类中的所有属性
setAccessible(true)
设置当前属性为可见 入参:ture或false
getMethods()
获取类的所有方法
invoke(obj)
通过反射执行方法 入参:类的元信息
getAnnotation(class) 获取注解 入参:需要获取注解的Class
四.代理模式
代理模式为其他对象提供一种代理,以控制这个对象的访问.代理对象在客户端和目标对象之间起到中介的作用.
代理模式的作用:
➢在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
➢代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。
静态代理:
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象-起实现相同的接口或
者是继承相同父类。
静态代理总结
➢优点:不修改目标对象的功能前提下,对目标功能进行扩展。
➢缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类被创建,类太多。同时,一旦接口增加方法,目标对象与代理对象都要维护,增加维护成本.
动态代理:代理类在程序运行时创建的代理方式被称为动态代理。
这种情况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。
静态代理VS动态代理
动态代理vs静态代理:
➢静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。
➢静态代理对象只服务于- -种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。