JAVA基础完整PPT课件_第1页
JAVA基础完整PPT课件_第2页
JAVA基础完整PPT课件_第3页
JAVA基础完整PPT课件_第4页
JAVA基础完整PPT课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021/3/91JAVA基础篇2021/3/92JAVA优点n平台无关性n分布式应用n多线程n纯面向对象n应用范围广(1)Java的桌面应用(2)Java Web应用(3)Java企业级应用(4)Java嵌入式应用2021/3/93JAVA编译原理Java编译程序将Java源程序编译成JVM可执行代码Java字节码. JAVA源文件源文件(.java)字节码字节码(.class)运行jvm 字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行。代码的装入代码的装入:类装载器class loader代码的校验代码的校验:被装入的代码由字节码校验器进行检查

2、代码执行代码执行:1) 即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节2021/3/94J2SE的运行环境设置n安装JAVA SDK(Java Software Development Kit) 通常,我们需要设置三个环境变量:JAVA_HOME、PATH 和 CLASSPATHn JAVA_HOME:SDK的安装目录如:c:javanPATH:指定一个路径列表,用于搜索可执行文件的。如:d:oracleproduct10.1.0Db_2bin;%JAVA_HOME%binn CLASSPATH:也指定一个路

3、径列表,是用于搜索 Java 编译或者运行时需要用到的类。如:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%librt.jar; 2021/3/95JAVA基本数据类型n进制二进制、八进制、十进制n整型nbyte(1个字节) nint (4个字节) Integernshort (2个字节) Shortnlong(8个字节) n浮点型nfloat (4个字节)ndouble2021/3/96JAVA基本数据类型n字符型ncharn布尔型nboolean数制:十进制:10八进制:012十六进制:0 x102021/3/97String 函数n常用函数n indexOf(

4、)n substring()n lastIndexOf()n replace()n replaceAll()n matches()n split()n toUpperCase()n 2021/3/98char data = a, b, c; String str = new String(data);System.out.println(abc); String cde = cde; System.out.println(abc + cde); String c = abc.substring(2,3); String d = cde.substring(1, 2);2021/3/99Date

5、nDate类型DateFormat.format(Date date)Date date =new Date();/System.out.println(DateFormat.getInstance().format(date);SimpleDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);/MM HH hhSystem.out.println(sdf.format(date);Calendar类型Calendar cal=Calendar.getInstance();cal.set(Calendar.DAY_OF_MONTH,

6、20);GregorianCalendar类型GregorianCalendar gc=new GregorianCalendar();gc.setTime(date);2021/3/910数组n一维组n二维数组n三维数组n例子:nint intArr=new int1,3,4;ncharcharArr=new chara,b;n2021/3/911面向对象n类(内部类)访问控制符类:public /protected/n对象n包n重载(多态)n继承依赖聚合继承2021/3/912接口n接口声明n接口实现n接口多重实现n接口继承2021/3/913抽象n抽象类n抽象方法2021/3/914集合

7、框架n映射(map)、集(set)、列表(list)、树(tree)、数组(array)、散列表(hashtable)2021/3/915集合基类nCollection 接口是一组允许重复的对象。 nSet 接口继承 Collection,但不允许重复。 nList 接口继承 Collection,允许重复,并引入位置下标。 nMap 接口既不继承 Set 也不继承 Collection。 接口接口实现实现历史集合类历史集合类Set HashSet TreeSet List ArrayList Vector LinkedList Stack Map HashMap Hashtable Tree

8、Map Properties 2021/3/916Collection接口n添加、删除元素boolean add(Object element) boolean remove(Object element) n查询操作:int size() boolean isEmpty() boolean contains(Object element) Iterator iterator() 2021/3/917Set 接口接口nHashSet nTreeSet(有序)2021/3/918List 接口接口void add(int index, Object element) boolean addAll

9、(int index, Collection collection) Object get(int index) int indexOf(Object element) int lastIndexOf(Object element) Object remove(int index) Object set(int index, Object element) ListIterator listIterator() ListIterator listIterator(int startIndex) List subList(int fromIndex, int toIndex) ArrayList

10、 类和类和 LinkedList 类类 2021/3/919Map 接口接口2021/3/920JAVA IOnFile对象canRead()canWrite()delete()deleteOnExist()Exists()getAbsoluteFile()length()list()getName()getParent()getPath()listFiles()mkdir()2021/3/921InputStream抽象类及其子类字节流nAudioInputStreamnByteArrayInputStreamnFileInputStreamnFilterInputStreamnObject

11、InputStreamnPipedInputStreamnSequenceInputStreamnStringBufferInputStream 2021/3/922OutputStreamnByteArrayOutputStreamnFileOutputStreamnFilterOutputStreamnObjectOutputStreamnPipedOutputStream 2021/3/923以字节为导向的streamnInput和和Output nInputStream 1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用2) String

12、BufferInputStream:把一个String对象作为InputStream3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作4) PipedInputStream:实现了pipe的概念,主要在线程中使用5) SequenceInputStream:把多个InputStream合并为一个InputStream2021/3/924OutputStream 1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中2) FileOutputStream:把信息存入文件中3) PipedOutputStream:实现了pip

13、e的概念,主要在线程中使用4) SequenceOutputStream:把多个OutStream合并为一个OutStream2021/3/925以以Unicode字符为导向的字符为导向的stream InputStream1) CharArrayReader:与ByteArrayInputStream对应2) StringReader:与StringBufferInputStream对应3) FileReader:与FileInputStream对应4) PipedReader:与PipedInputStream对应OutStream1) CharArrayWriter:与ByteArray

14、OutputStream对应2) StringWriter:无与之对应的以字节为导向的stream3) FileWriter:与FileOutputStream对应4) PipedWriter:与PipedOutputStream对应2021/3/926线程n进程、线程 (单CPU,多CPU)n单线程、多线程单线程代码1多线程代码2021/3/927线程n用Thread 类创建线程n用Runnable接口创建线程nstart()nrun()njoin()线程合并2021/3/928后台线程与联合线程n如果我们对某个线程对象在启动(调用start方法)之前调用了setDaemon(true)方法

15、,这个线程就变成后台线程。n对于Java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程在运行,这)个进程就会结束。nPp.join()的作用就是把pp所对于的线程合并到调用pp.join;语句的线程中。2021/3/929使用Runnable接口创建多线程n适合多个相同程序的代码的线程去处理同一资源的情况,把虚拟的CPU(线程)同程序的代码、数据有效分离,较好体现了面向对象的设计思想n可以避免由于JAVA的继承特性带来的局限。假若一个类已经继承了另一类,则我们只能使该类实现Runnablen当线程被构造时,需要的代码和数据通过另一个对象作为构造参数传递时去

16、,这个对象就是实现了Runnable接口。2021/3/930多线程的应用n网络聊天程序n发送键盘的数据,接收别人发送的数据从键盘上读取输入发送键盘的数据给对方接收对方的数据从键盘上读取输入发送键盘的数据给对方接收对方的数据2021/3/931多线程应用2n批量数据copy的问题nWEB服务器的请求及处理2021/3/932多线程同步n例子演示n代码块同步n方法块同步2021/3/933产生者与消费者例子n一个往消息队列中放入消息n一个往消息队列中取出消息n消息内容包括产生的ID号及内容n三个生产者,三个消费者2021/3/934线程间的通讯nwait() /如队列为空,我们可以等待,或队列已

17、经满的时候nnotify()/通知由wait()而等待的线程,如我们往某个列队中放数据时,这时可以通知。nnotifyAll()2021/3/935JAVA反射2021/3/936AWT2021/3/937Swing2021/3/938JDBC编程n应用程序JDBCMySQL DriverDb2 DriverOracle DriverMySQLDb2MySQL2021/3/939连接数据库的步骤n注册驱动(只做一次)n建立连接(Conntection)n创建执行SQL的语句(Statement)n执行语句n处理执行结果n释放资源2021/3/940注册驱动nClass.forName(“com

18、.mysql.jdbc.Driver”);n推荐这种方式,不会对具体的驱动类产生依赖。nDriverManager.registerDriver(com.mysql.jdbc.Driver);n会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。nSystem.setProperty(“jdbc.drivers”, “driver1:driver2”);n虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。 n驱动类型(四种类型)2021/3/941建立连接(Connection)nConnection conn = DriverManager.getC

19、onnection(url, user, password);nurl格式:JDBC:子协议:子名称/主机名:端口/数据库名?属性名=属性值&nUser,password可以用“属性名=属性值”方式告诉数据库;n其他参数如:useUnicode=true&characterEncoding=GBK。2021/3/942创建执行SQL的语句(Statement)nStatement Statement st = conn.createStatement();st.executeQuery(sql);nPreparedStatementString sql = “select *

20、from table_name where col_name=?”;PreparedStatement ps = conn.preparedStatement(sql);ps.setString(1, “col_value”);ps.executeQuery();2021/3/943处理执行结果(ResultSet)ResultSet rs = statement.executeQuery(sql);While(rs.next()rs.getString(“col_name”);rs.getInt(“col_name”);/2021/3/944释放资源n释放ResultSet, Stateme

21、nt,Connection.n数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。2021/3/945基本的基本的CRUD(创建、读取、更(创建、读取、更新、删除)新、删除) n模板代码 Connection conn = null;Statement st=null;ResultSet rs = null;try /获得Connection/创建Statement/处理查询结果ResultSet finally /释放资源ResultSet, Stateme

22、nt,Connection2021/3/946插入记录n增加对应SQL的INSERT,返回增加成功的行(记录)数 conn = getConnection();Statement st = conn.createStatement();String sql=“insert into user(name, age,regist_date )” + “values(name, 10, now()”;int i = st.executeUpdate(sql);/i为插入的记录数2021/3/947读取记录n读取(查询)对应SQL的SELECT,返回查询结果conn = getConnection()

23、;st = conn.createStatement();String sql = select id, name, age,regist_date from user;rs = st.executeQuery(sql);while (rs.next() System.out.print(rs.getInt(id) + tt );System.out.print(rs.getString(name) + tt );System.out.print(rs.getInt(age) + tt );System.out.print(rs.getTimestamp(regist_date) + tt )

24、;System.out.println();2021/3/948SQL注入注入,PreparedStatement和和Statement n在SQL中包含特殊字符或SQL的关键字(如: or 1 or )时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。nPreperedStatement(从Statement扩展而来)相对Statement的优点:1.没有SQL注入的问题。2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的

25、数据库连接没有关闭的情况下有效)。 2021/3/949数据类型数据类型n详细信息见java.sql.Typesn几种特殊且比较常用的类型1.DATA,TIME,TIMESTAMP date,time,datetime存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); 取:rs.getDate(i); rs.getTime(i); rs.getTimestamp(i);2.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s);

26、取:reader = rs. getCharacterStream(i); reader = rs.getClob(i).getCharacterStream(); string = rs.getString(i);3.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); 取:rs.getBinaryStream(i); rs.getBlob(i).getBinaryStream(); 2021/3/950一个简单用户相关的数据访问层一个简单用户相关的数据访问层 nJ2EE三层架构简介表示层 、业务逻辑层、数据访问层,三层之间用接口隔离

27、。n定义domain对象User,定义存取用户的接口n用JDBC实现接口n用配置文件(properties)和反射实现与具体类的耦合 2021/3/951事务事务(ACID)n原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。 n一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。 n隔离性(isolcation):一个事务处理对另一个事务处理的影响。 n持续性(durability):事务处理的效果能够被永久保存下来 。nconnection.setAutoCommit(false);/打开事务。mit();

28、/提交事务。nconnection.rollback();/回滚事务。2021/3/952事务事务(SavePoint)n当只想撤销事务中的部分操作时可使用SavePointnSavePoint sp = connection.setSavepoint();nconnection.rollerbak(sp);mit();2021/3/953事务事务(JTA)n跨越多个数据源的事务,使用JTA容器实现事务。n分成两阶段提交。njavax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName);tx.begin

29、();/connection1 connection2 (可能来自不同的数据库) mit();/tx.rollback();2021/3/954隔离级别隔离级别多线程并发读取数据时的正确性 nconnection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); nV:可能出现,X:不会出现隔离级别隔离级别 脏读脏读 不可重复读不可重复读 幻读幻读 读未提交(Read uncommitted)VVV读已提交(Read committed)xVV可重复读(Repeatable read)xxV可串行化(Serializ

30、able )xxx2021/3/955存储过程n存储过程CallableStatement(从PreperedStatement扩展来)cs = connection.prepareCall(“call psname(?,?,?)”);cs.registerOutParameter(index, Types.INTEGER);cs.setXXX(i, xxxx);cs.executeUpdate();int id=cs.getInt(index);2021/3/956其他的几个其他的几个APInPreparedStatement.getGeneratedKeys()PreparedStatem

31、ent ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);ps.executeUpdate();ResultSet rs = st.getGeneratedKeys();rs.getInt(1);n批处理,可以大幅度提升大量增、删、改的速度。PreparedStatement.addBatch();PreparedStatement.executeBatch();2021/3/957其他的几个其他的几个APIn可滚动的结果集Statement st = connection.createStatemen

32、t(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs = st.executeQuery(sql);rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast();rs.absolute(9);rs.moveToInsertRow();n可更新的结果集conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABL

33、E);rs.updateString(col name, new value);rs.updateRow();2021/3/958DatabaseMetaData和ParameterMetaDatanDatabaseMetaData meta = connection.getMetaData();n通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。nParameterMetaData pmd = preparedStatement.getParameterMetaData();n通

34、过 ParameterMetaData可以获得参数信息。2021/3/959ResultSetMetaDatanResultSetMetaData meta = rs.getMetaData();n通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。 n可以将ResultSet放入Map(key:列名 value:列值)。n用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping) 1)让SQL语句中列别名和要读入的对象属性名一样;2)通过ResultSetMetaData获得结果列数和列别名;3)通过反射将对象的所有setXxx方法找到;4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的xxx于列别名相等);5)由上一步找到的方法和列别名对应关系进行赋值Method.invoke(obj, rs.getObject(columnAliasName);2021/3/960数据源和连接池数据源和连接池nDataSource用来取代DriverM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论