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):用于执行INSERTUPDATEDELETE语句以及SQL DDL语句,如:CREATE TABLEDROP TABLE3、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静态代理:
➢静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。
➢静态代理对象只服务于- -种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值