收藏 分销(赏)

JAVA基础PPT.ppt

上传人:可**** 文档编号:755149 上传时间:2024-03-05 格式:PPT 页数:63 大小:4.44MB
下载 相关 举报
JAVA基础PPT.ppt_第1页
第1页 / 共63页
JAVA基础PPT.ppt_第2页
第2页 / 共63页
JAVA基础PPT.ppt_第3页
第3页 / 共63页
JAVA基础PPT.ppt_第4页
第4页 / 共63页
JAVA基础PPT.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

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

2、行该机器码。2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节J2SE的运行环境设置安装JAVASDK(JavaSoftwareDevelopmentKit)通常,我们需要设置三个环境变量:JAVA_HOME、PATH和 CLASSPATH1.JAVA_HOME:SDK的安装目录如:c:java2.PATH:指定一个路径列表,用于搜索可执行文件的。如:d:oracleproduct10.1.0Db_2bin;%JAVA_HOME%bin3.CLASSPATH:也指定一个路径列表,是用于搜索 Java编译或者运行时需要用到的类。如:.;%JAVA_HOME%libtools.

3、jar;%JAVA_HOME%librt.jar;JAVA基本数据类型进制二进制、八进制、十进制整型1.byte(1个字节)2.int(4个字节)Integer3.short(2个字节)Short4.long(8个字节)浮点型1.float(4个字节)2.doubleJAVA基本数据类型字符型1.char布尔型1.boolean数制:十进制:10八进制:012十六进制:0 x10String 函数常用函数indexOf()substring()lastIndexOf()replace()replaceAll()matches()split()toUpperCase()chardata=a,b,

4、c;Stringstr=newString(data);System.out.println(abc);Stringcde=cde;System.out.println(abc+cde);Stringc=abc.substring(2,3);Stringd=cde.substring(1,2);DateDate类型DateFormat.format(Date date)Datedate=newDate();/System.out.println(DateFormat.getInstance().format(date);SimpleDateFormatsdf=newSimpleDateForm

5、at(yyyy-MM-ddHH:mm:ss);/MMHHhhSystem.out.println(sdf.format(date);Calendar类型Calendarcal=Calendar.getInstance();cal.set(Calendar.DAY_OF_MONTH,20);GregorianCalendar类型GregorianCalendargc=newGregorianCalendar();gc.setTime(date);数组一维组二维数组三维数组例子:intintArr=newint1,3,4;charcharArr=newchara,b;面向对象类(内部类)访问控制符

6、类:public/protected/对象包重载(多态)继承依赖聚合继承接口接口声明接口实现接口多重实现接口继承抽象抽象类抽象方法集合框架映射(map)、集(set)、列表(list)、树(tree)、数组(array)、散列表(hashtable)集合基类Collection接口是一组允许重复的对象。Set接口继承 Collection,但不允许重复。List接口继承 Collection,允许重复,并引入位置下标。Map接口既不继承 Set也不继承 Collection。接口接口实现实现历历史集合史集合类类SetHashSetTreeSetListArrayListVectorLinked

7、ListStackMapHashMapHashtableTreeMapPropertiesCollection接口添加、删除元素booleanadd(Objectelement)booleanremove(Objectelement)查询操作:intsize()booleanisEmpty()booleancontains(Objectelement)Iteratoriterator()Set Set 接口接口HashSetTreeSet(有序)List List 接口接口voidadd(intindex,Objectelement)booleanaddAll(intindex,Collect

8、ioncollection)Objectget(intindex)intindexOf(Objectelement)intlastIndexOf(Objectelement)Objectremove(intindex)Objectset(intindex,Objectelement)ListIteratorlistIterator()ListIteratorlistIterator(intstartIndex)ListsubList(intfromIndex,inttoIndex)ArrayList 类和类和 LinkedList 类类 Map Map 接口接口JAVA IOFile对象can

9、Read()canWrite()delete()deleteOnExist()Exists()getAbsoluteFile()length()list()getName()getParent()getPath()listFiles()mkdir()InputStream抽象类及其子类字节流字节流AudioInputStreamByteArrayInputStreamFileInputStreamFilterInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamStringBufferInputStreamOutputSt

10、reamByteArrayOutputStreamFileOutputStreamFilterOutputStreamObjectOutputStreamPipedOutputStream以字节为导向的streamInput和和Output InputStream1)ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用2)StringBufferInputStream:把一个String对象作为InputStream3)FileInputStream:把一个文件作为InputStream,实现对文件的读取操作4)PipedInputStream:实现了p

11、ipe的概念,主要在线程中使用5)SequenceInputStream:把多个InputStream合并为一个InputStreamOutputStream1)ByteArrayOutputStream:把信息存入内存中的一个缓冲区中2)FileOutputStream:把信息存入文件中3)PipedOutputStream:实现了pipe的概念,主要在线程中使用4)SequenceOutputStream:把多个OutStream合并为一个OutStream以以UnicodeUnicode字符为导向的字符为导向的streamstreamInputStream1)CharArrayReade

12、r:与ByteArrayInputStream对应2)StringReader:与StringBufferInputStream对应3)FileReader:与FileInputStream对应4)PipedReader:与PipedInputStream对应OutStream1)CharArrayWriter:与ByteArrayOutputStream对应2)StringWriter:无与之对应的以字节为导向的stream3)FileWriter:与FileOutputStream对应4)PipedWriter:与PipedOutputStream对应线程进程、线程(单CPU,多CPU)单

13、线程、多线程单线程代码1多线程代码线程用Thread类创建线程用Runnable接口创建线程start()run()join()线程合并后台线程与联合线程如果我们对某个线程对象在启动(调用start方法)之前调用了setDaemon(true)方法,这个线程就变成后台线程。对于Java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程在运行,这)个进程就会结束。Pp.join()的作用就是把pp所对于的线程合并到调用pp.join;语句的线程中。使用Runnable接口创建多线程适合多个相同程序的代码的线程去处理同一资源的情况,把虚拟的CPU(线程)同程序的代

14、码、数据有效分离,较好体现了面向对象的设计思想可以避免由于JAVA的继承特性带来的局限。假若一个类已经继承了另一类,则我们只能使该类实现Runnable当线程被构造时,需要的代码和数据通过另一个对象作为构造参数传递时去,这个对象就是实现了Runnable接口。多线程的应用网络聊天程序发送键盘的数据,接收别人发送的数据从键盘上读取输入发送键盘的数据给对方接收对方的数据从键盘上读取输入发送键盘的数据给对方接收对方的数据多线程应用2批量数据copy的问题WEB服务器的请求及处理多线程同步例子演示代码块同步方法块同步产生者与消费者例子一个往消息队列中放入消息一个往消息队列中取出消息消息内容包括产生的I

15、D号及内容三个生产者,三个消费者线程间的通讯wait()/如队列为空,我们可以等待,或队列已经满的时候notify()/通知由wait()而等待的线程,如我们往某个列队中放数据时,这时可以通知。notifyAll()JAVA反射AWTSwingJDBC编程应用程序JDBCMySQLDriverDb2DriverOracleDriverMySQLDb2MySQL连接数据库的步骤注册驱动(只做一次)建立连接(Conntection)创建执行SQL的语句(Statement)执行语句处理执行结果释放资源注册驱动Class.forName(“com.mysql.jdbc.Driver”);推荐这种方式

16、,不会对具体的驱动类产生依赖。DriverManager.registerDriver(com.mysql.jdbc.Driver);会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。System.setProperty(“jdbc.drivers”,“driver1:driver2”);虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。驱动类型(四种类型)建立连接(Connection)Connectionconn=DriverManager.getConnection(url,user,password);url格式:JDBC:子协议:子名称/主

17、机名:端口/数据库名?属性名=属性值&User,password可以用“属性名=属性值”方式告诉数据库;其他参数如:useUnicode=true&characterEncoding=GBK。创建执行SQL的语句(Statement)StatementStatementst=conn.createStatement();st.executeQuery(sql);PreparedStatementStringsql=“select*fromtable_namewherecol_name=?”;PreparedStatementps=conn.preparedStatement(sql);ps.s

18、etString(1,“col_value”);ps.executeQuery();处理执行结果(ResultSet)ResultSetrs=statement.executeQuery(sql);While(rs.next()rs.getString(“col_name”);rs.getInt(“col_name”);/释放资源释放ResultSet,Statement,Connection.数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。基本的基本的C

19、RUDCRUD(创建、读取、(创建、读取、更新、删除)更新、删除)模板代码 Connectionconn=null;Statementst=null;ResultSetrs=null;try/获得Connection/创建Statement/处理查询结果ResultSetfinally/释放资源ResultSet,Statement,Connection插入记录增加对应SQL的INSERT,返回增加成功的行(记录)数 conn=getConnection();Statementst=conn.createStatement();Stringsql=“insertintouser(name,ag

20、e,regist_date)”+“values(name,10,now()”;inti=st.executeUpdate(sql);/i为插入的记录数读取记录读取(查询)对应SQL的SELECT,返回查询结果conn=getConnection();st=conn.createStatement();Stringsql=selectid,name,age,regist_datefromuser;rs=st.executeQuery(sql);while(rs.next()System.out.print(rs.getInt(id)+tt);System.out.print(rs.getStri

21、ng(name)+tt);System.out.print(rs.getInt(age)+tt);System.out.print(rs.getTimestamp(regist_date)+tt);System.out.println();SQLSQL注入注入,PreparedStatement,PreparedStatement和和StatementStatement 在SQL中包含特殊字符或SQL的关键字(如:or1or)时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。PreperedStatement(从Stateme

22、nt扩展而来)相对Statement的优点:1.没有SQL注入的问题。2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。数据类型数据类型详细信息见java.sql.Types几种特殊且比较常用的类型1.DATA,TIME,TIMESTAMPdate,time,datetime存:ps.setDate(i,d);ps.setTime(i,t);ps.setTimestamp(i,ts);取:rs.getDate(i);rs.getTime(i);rs.getT

23、imestamp(i);2.CLOBtext存:ps.setCharacterStream(index,reader,length);ps.setString(i,s);取:reader=rs.getCharacterStream(i);reader=rs.getClob(i).getCharacterStream();string=rs.getString(i);3.BLOBblob存:ps.setBinaryStream(i,inputStream,length);取:rs.getBinaryStream(i);rs.getBlob(i).getBinaryStream();一个简单用户相

24、关的数据访问一个简单用户相关的数据访问层层 J2EE三层架构简介表示层、业务逻辑层、数据访问层,三层之间用接口隔离。定义domain对象User,定义存取用户的接口用JDBC实现接口用配置文件(properties)和反射实现与具体类的耦合 事务事务(ACIDACID)原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。隔离性(isolcation):一个事务处理对另一个事务处理的影响。持续性(durability):事务处理的效果能够被永久保存下来。conne

25、ction.setAutoCommit(false);/打开事务。mit();/提交事务。connection.rollback();/回滚事务。事务事务(SavePointSavePoint)当只想撤销事务中的部分操作时可使用SavePointSavePointsp=connection.setSavepoint();connection.rollerbak(sp);mit();事务事务(JTAJTA)跨越多个数据源的事务,使用JTA容器实现事务。分成两阶段提交。javax.transaction.UserTransactiontx=(UserTransaction)ctx.lookup(“

26、jndiName);tx.begin();/connection1connection2(可能来自不同的数据库)mit();/tx.rollback();隔离级别隔离级别隔离级别隔离级别多线程并发读取数据时的正确性多线程并发读取数据时的正确性 connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);V:可能出现,X:不会出现隔离级别隔离级别脏读脏读不可重复读不可重复读幻读幻读读未提交(Readuncommitted)VVV读已提交(Readcommitted)xVV可重复读(Repeatableread

27、)xxV可串行化(Serializable)xxx存储过程存储过程CallableStatement(从PreperedStatement扩展来)cs=connection.prepareCall(“callpsname(?,?,?)”);cs.registerOutParameter(index,Types.INTEGER);cs.setXXX(i,xxxx);cs.executeUpdate();intid=cs.getInt(index);其他的几个其他的几个APIAPIPreparedStatement.getGeneratedKeys()PreparedStatementps=con

28、nection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);ps.executeUpdate();ResultSetrs=st.getGeneratedKeys();rs.getInt(1);批处理,可以大幅度提升大量增、删、改的速度。PreparedStatement.addBatch();PreparedStatement.executeBatch();其他的几个其他的几个APIAPI可滚动的结果集Statementst=connection.createStatement(ResultSet.TYPE_SCROLL_SENS

29、ITIVE,ResultSet.CONCUR_UPDATABLE);ResultSetrs=st.executeQuery(sql);rs.beforeFirst();rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast();rs.absolute(9);rs.moveToInsertRow();可更新的结果集conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs.updateString(colname,newvalu

30、e);rs.updateRow();DatabaseMetaDataDatabaseMetaData和和ParameterMetaDataParameterMetaDataDatabaseMetaDatameta=connection.getMetaData();通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。ParameterMetaDatapmd=preparedStatement.getParameterMetaData();通过 ParameterMetaData可以获得

31、参数信息。ResultSetMetaDataResultSetMetaDatameta=rs.getMetaData();通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。可以将ResultSet放入Map(key:列名 value:列值)。用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping)1)让SQL语句中列别名和要读入的对象属性名一样;2)通过ResultSetMetaData获得结果列数和列别名;3)通过反射将对象的所有setXxx方法找到;4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的

32、xxx于列别名相等);5)由上一步找到的方法和列别名对应关系进行赋值Method.invoke(obj,rs.getObject(columnAliasName);数据源和连接池数据源和连接池DataSource用来取代DriverManager来获取Connection;通过DataSource获得Connection速度很快;通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),他的close方法已经被修改。一般DataSource内部会用一个连接池来缓存Connection,这样可以大幅度提高数据库的访问速度;连接池可以理解成一个能够存放Connec

33、tion的Collection;我们的程序只和DataSource打交道,不会直接访问连接池;一个简单的数据源一个简单的数据源实现使用装饰模式的Connection(核心代码)classMyConnectionimplementsConnectionprivateConnectionrealConn;privateLinkedListconnPool;MyConnection(ConnectionrConn,LinkedListcPool)this.realConn=rConn;this.connPool=cPool;publicvoidclose()this.connPool.addLast

34、(this);/.一个简单的数据源一个简单的数据源实现DataSource(核心代码)classMyDataSourceimplementsDataSourceprivateLinkedListconnPool=newVector();publicConnectiongetConneciton()if(this.connPool.size()0)returnthis.connPool.removeFirst(0);returncreateConnection();privateConnectioncreateConnection()ConnectionrealConn=DriverManager.getConnection();ConnectionmyConn=newMyConnection(realConn,this.connPool);returnmyConn;/.常用的开源实现DBCP使用DBCP必须用的三个包:commons-dbcp-1.2.1.jar,commons-pool-1.2.jar,commons-collections-3.1.jar。JavaAPI:BasicDataSourceFactory.createDataSource(properties);

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 计算机应用

移动网页_全站_页脚广告1

关于我们      联系我们       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号  |  icp.png浙ICP备2021020529号-1 浙B2-2024(办理中)  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服