收藏 分销(赏)

JAVA基础.ppt

上传人:二*** 文档编号:12593419 上传时间:2025-11-08 格式:PPT 页数:63 大小:475.50KB 下载积分:5 金币
下载 相关 举报
JAVA基础.ppt_第1页
第1页 / 共63页
本文档共63页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,单击此处编辑标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,JAVA,基础篇,.,JAVA,优点,平台无关性,分布式应用,多线程,纯面向对象,应用范围广,(,1,),Java,的桌面应用,(,2,),Java Web,应用,(,3,),Java,企业级应用,(,4,),Java,嵌入式应用,.,JAVA,编译原理,Java,编译程序将,Java,源程序编译成,JVM,可执行代码,Java,字节码,.,JAVA,源文件,(.java),字节码,(.class),运行,jvm,字节码的工作是由解释器来完成的。解释执行过程分三步进行:,代码的装入、代码的校验、和代码的执行。,代码的装入,:类装载器,class loader,代码的校验,:被装入的代码由字节码校验器进行检查,代码执行,:,1,)即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。,2,)解释执行方式:解释器通过每次解释并执行一小段代码来完成,java,字节,.,J2SE,的运行环境设置,安装,JAVA SDK(Java Software Development Kit),通常,我们需要设置三个环境变量:,JAVA_HOME、PATH,和,CLASSPATH,JAVA_HOME,:SDK,的安装目录如:,c:java,PATH,:,指定一个路径列表,用于搜索可执行文件的。如:,d:oracleproduct10.1.0Db_2bin;%JAVA_HOME%bin,CLASSPATH,:,也指定一个路径列表,是用于搜索,Java,编译或者运行时需要用到的类。,如:,.;%JAVA_HOME%libtools.jar;%JAVA_HOME%librt.jar;,.,JAVA,基本数据类型,进制二进制、八进制、十进制,整型,byte(1,个字节,),int (4,个字节,)Integer,short(2,个字节,)Short,long,(8,个字节,),浮点型,float,(4,个字节,),double,.,JAVA,基本数据类型,字符型,char,布尔型,boolean,数制:,十进制:,10,八进制:,012,十六进制:,0 x10,.,String,函数,常用函数,indexOf(),substring(),lastIndexOf(),replace(),replaceAll(),matches(),split(),toUpperCase(),.,char 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);,.,Date,Date,类型,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 hh,System.out.println(sdf.format(date);,Calendar,类型,Calendar cal=Calendar.getInstance();,cal.set(Calendar.DAY_OF_MONTH,20);,GregorianCalendar,类型,GregorianCalendar gc=new GregorianCalendar();,gc.setTime(date);,.,数组,一维组,二维数组,三维数组,例子:,int intArr=new int1,3,4;,charcharArr=new chara,b;,.,面向对象,类(内部类),访问控制符类:,public/protected/,对象,包,重载(多态),继承,依赖,聚合,继承,.,接口,接口声明,接口实现,接口多重实现,接口继承,.,抽象,抽象类,抽象方法,.,集合框架,映射(,map)、,集(,set)、,列表(,list)、,树(,tree)、,数组(,array)、,散列表(,hashtable),.,集合基类,Collection,接口是一组允许重复的对象。,Set,接口继承,Collection,,但不允许重复。,List,接口继承,Collection,,允许重复,并引入位置下标。,Map,接口既不继承,Set,也不继承,Collection,。,接口,实现,历史集合类,Set,HashSet,TreeSet,List,ArrayList,Vector,LinkedList,Stack,Map,HashMap,Hashtable,TreeMap,Properties,.,Collection,接口,添加、删除元素,boolean add(Object element),boolean remove(Object element),查询操作:,int size(),boolean isEmpty(),boolean contains(Object element),Iterator iterator(),.,Set,接口,HashSet,TreeSet,(有序),.,List,接口,void add(int index,Object element),boolean addAll(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,类和,LinkedList,类,.,Map,接口,.,JAVA IO,File,对象,canRead(),canWrite(),delete(),deleteOnExist(),Exists(),getAbsoluteFile(),length(),list(),getName(),getParent(),getPath(),listFiles(),mkdir(),.,InputStream,抽象类及其子类,字节流,AudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,ObjectInputStream,PipedInputStream,SequenceInputStream,StringBufferInputStream,.,OutputStream,ByteArrayOutputStream,FileOutputStream,FilterOutputStream,ObjectOutputStream,PipedOutputStream,.,以字节为导向的stream,Input,和,Output,InputStream,1)ByteArrayInputStream,:把内存中的一个缓冲区作为,InputStream,使用,2)StringBufferInputStream,:把一个,String,对象作为,InputStream,3)FileInputStream,:把一个文件作为,InputStream,,实现对文件的读取操作,4)PipedInputStream,:实现了,pipe,的概念,主要在线程中使用,5)SequenceInputStream,:把多个,InputStream,合并为一个,InputStream,.,OutputStream,1)ByteArrayOutputStream,:把信息存入内存中的一个缓冲区中,2)FileOutputStream,:把信息存入文件中,3)PipedOutputStream,:实现了,pipe,的概念,主要在线程中使用,4)SequenceOutputStream,:把多个,OutStream,合并为一个,OutStream,.,以,Unicode,字符为导向的,stream,InputStream,1)CharArrayReader:,与,ByteArrayInputStream,对应,2)StringReader:,与,StringBufferInputStream,对应,3)FileReader:,与,FileInputStream,对应,4)PipedReader:,与,PipedInputStream,对应,OutStream,1)CharArrayWriter:,与,ByteArrayOutputStream,对应,2)StringWriter:,无与之对应的以字节为导向的,stream3)FileWriter:,与,FileOutputStream,对应,4)PipedWriter:,与,PipedOutputStream,对应,.,线程,进程、线程,(,单,CPU,多,CPU),单线程、多线程,单线程代码1,多线程代码,.,线程,用,Thread,类创建线程,用,Runnable,接口创建线程,start(),run(),join(),线程合并,.,后台线程与联合线程,如果我们对某个线程对象在启动(调用,start,方法)之前调用了,setDaemon(true),方法,这个线程就变成后台线程。,对于,Java,程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中只有后台线程在运行,这,),个进程就会结束。,Pp.join(),的作用就是把,pp,所对于的线程合并到调用,pp.join;,语句的线程中。,.,使用,Runnable,接口创建多线程,适合多个相同程序的代码的线程去处理同一资源的情况,把虚拟的,CPU(,线程)同程序的代码、数据有效分离,较好体现了面向对象的设计思想,可以避免由于,JAVA,的继承特性带来的局限。假若一个类已经继承了另一类,则我们只能使该类实现,Runnable,当线程被构造时,需要的代码和数据通过另一个对象作为构造参数传递时去,这个对象就是实现了,Runnable,接口。,.,多线程的应用,网络聊天程序,发送键盘的数据,接收别人发送的数据,从键盘上读取输入,发送键盘的数据给对方,接收对方的数据,从键盘上读取输入,发送键盘的数据给对方,接收对方的数据,.,多线程应用,2,批量数据,copy,的问题,WEB,服务器的请求及处理,.,多线程同步,例子演示,代码块同步,方法块同步,.,产生者与消费者例子,一个往消息队列中放入消息,一个往消息队列中取出消息,消息内容包括产生的,ID,号及内容,三个生产者,三个消费者,.,线程间的通讯,wait()/如队列为空,我们可以等待,或队列已经满的时候,notify()/通知由wait()而等待的线程,如我们往某个列队中放数据时,这时可以通知。,notifyAll(),.,JAVA,反射,.,AWT,.,Swing,.,JDBC,编程,应用程序,JDBC,MySQL Driver,Db2 Driver,Oracle Driver,MySQL,Db2,MySQL,.,连接数据库的步骤,注册驱动(只做一次),建立连接(,Conntection,),创建执行,SQL,的语句(,Statement),执行语句,处理执行结果,释放资源,.,注册驱动,Class.forName(“com.mysql.jdbc.Driver”);,推荐这种方式,不会对具体的驱动类产生依赖。,DriverManager.registerDriver(com.mysql.jdbc.Driver);,会造成,DriverManager,中产生两个一样的驱动,并会对具体的驱动类产生依赖。,System.setProperty(“jdbc.drivers”,“driver1:driver2”);,虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。,驱动类型,(,四种类型,),.,建立连接,(Connection),Connection conn=DriverManager.getConnection(url,user,password);,url,格式:,JDBC:,子协议,:,子名称,/,主机名,:,端口,/,数据库名?属性名,=,属性值,&,User,password,可以用“属性名,=,属性值”方式告诉数据库;,其他参数如:,useUnicode=true&characterEncoding=GBK,。,.,创建执行,SQL,的语句,(Statement),Statement,Statement st=conn.createStatement();,st.executeQuery(sql);,PreparedStatement,String sql=“select*from table_name where col_name=?”;,PreparedStatement ps=conn.preparedStatement(sql);,ps.setString(1,“col_value”);,ps.executeQuery();,.,处理执行结果,(ResultSet),ResultSet rs=statement.executeQuery(sql);,While(rs.next(),rs.getString(“col_name”);,rs.getInt(“col_name”);,/,.,释放资源,释放,ResultSet,Statement,Connection.,数据库连接(,Connection,)是非常稀有的资源,用完后必须马上释放,如果,Connection,不能及时正确的关闭将导致系统宕机。,Connection,的使用原则是尽量晚创建,尽量早的释放。,.,基本的,CRUD,(创建、读取、更新、删除),模板代码,Connection conn=null;,Statement st=null;,ResultSet rs=null;,try,/,获得,Connection,/,创建,Statement,/,处理查询结果,ResultSet,finally,/,释放资源,ResultSet,Statement,Connection,.,插入记录,增加对应,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,为插入的记录数,.,读取记录,读取(查询)对应,SQL,的,SELECT,,返回查询结果,conn=getConnection();,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);,System.out.println();,.,SQL,注入,PreparedStatement,和,Statement,在,SQL,中包含特殊字符或,SQL,的关键字,(,如:,or 1 or,),时,Statement,将出现不可预料的结果(出现异常或查询的结果不正确),可用,PreparedStatement,来解决。,PreperedStatement,(从,Statement,扩展而来)相对,Statement,的优点:,1.,没有,SQL,注入的问题。,2.Statement,会使数据库频繁编译,SQL,,可能造成数据库缓冲区溢出。,3.,数据库和驱动可以对,PreperedStatement,进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。,.,数据类型,详细信息见,java.sql.Types,几种特殊且比较常用的类型,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);,取:,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();,.,一个简单用户相关的数据访问层,J2EE,三层架构简介,表示层、业务逻辑层、数据访问层,三层之间用接口隔离。,定义,domain,对象,User,,定义存取用户的接口,用,JDBC,实现接口,用配置文件,(properties),和反射实现与具体类的耦合,.,事务,(,ACID,),原子性,(atomicity),:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。,一致性,(consistency),:在事务处理执行前后,数据库是一致的,(,数据库数据完整性约束,),。,隔离性,(isolcation),:一个事务处理对另一个事务处理的影响。,持续性,(durability),:事务处理的效果能够被永久保存下来。,connection.setAutoCommit(false);/,打开事务。,mit();/,提交事务。,connection.rollback();/,回滚事务。,.,事务,(,SavePoint,),当只想撤销事务中的部分操作时可使用,SavePoint,SavePoint sp=connection.setSavepoint();,connection.rollerbak(sp);mit();,.,事务,(,JTA,),跨越多个数据源的事务,使用,JTA,容器实现事务。,分成两阶段提交。,javax.transaction.UserTransaction tx=(UserTransaction)ctx.lookup(“jndiName);,tx.begin();,/connection1 connection2(,可能来自不同的数据库,),mit();/tx.rollback();,.,隔离级别,多线程并发读取数据时的正确性,connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);,V:,可能出现,,X:,不会出现,隔离级别,脏读,不可重复读,幻读,读未提交(,Read uncommitted,),V,V,V,读已提交(,Read committed,),x,V,V,可重复读(,Repeatable read,),x,x,V,可串行化(,Serializable,),x,x,x,.,存储过程,存储过程,CallableStatement,(从,PreperedStatement,扩展来),cs=connection.prepareCall(“call psname(?,?,?)”);,cs.registerOutParameter(index,Types.INTEGER);,cs.setXXX(i,xxxx);,cs.executeUpdate();,int id=cs.getInt(index);,.,其他的几个,API,PreparedStatement.getGeneratedKeys(),PreparedStatement ps=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);,ps.executeUpdate();,ResultSet rs=st.getGeneratedKeys();rs.getInt(1);,批处理,可以大幅度提升大量增、删、改的速度。,PreparedStatement.addBatch();,PreparedStatement.executeBatch();,.,其他的几个,API,可滚动的结果集,Statement st=,connection.createStatement(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();,可更新的结果集,conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);,rs.updateString(col name,new value);,rs.updateRow();,.,DatabaseMetaData,和,ParameterMetaData,DatabaseMetaData meta=connection.getMetaData();,通过,DatabaseMetaData,可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。,ParameterMetaData pmd=preparedStatement.getParameterMetaData();,通过,ParameterMetaData,可以获得参数信息。,.,ResultSetMetaData,ResultSetMetaData meta=rs.getMetaData();,通过,ResultSetMetaData,可以获得结果有几列、各列名、各列别名、各列类型等。,可以将,ResultSet,放入,Map(key:,列名,value:,列值,),。,用反射,ResultSetMetaData,将查询结果读入对象中(简单的,O/RMapping,),1),让,SQL,语句中列别名和要读入的对象属性名一样;,2),通过,ResultSetMetaData,获得结果列数和列别名;,3),通过反射将对象的所有,setXxx,方法找到,;,4),将,3,)找到的方法,setXxx,和,2,)找到的列别名进行匹配(即方法中的,xxx,于列别名相等);,5),由上一步找到的方法和列别名对应关系进行赋值,Method.invoke(obj,rs.getObject(columnAliasName);,.,数据源和连接池,DataSource,用来取代,DriverManager,来获取,Connection,;,通过,DataSource,获得,Connection,速度很快;,通过,DataSource,获得的,Connection,都是已经被包裹过的(不是驱动原来的连接),他的,close,方法已经被修改。,一般,DataSource,内部会用一个连接池来缓存,Connection,,这样可以大幅度提高数据库的访问速度;,连接池可以理解成一个能够存放,Connection,的,Collection,;,我们的程序只和,DataSource,打交道,不会直接访问连接池;,.,一个简单的数据源,实现,使用装饰模式的,Connection(,核心代码,),class MyConnection implements Connection,private Connection realConn;,private LinkedList connPool;,MyConnection(Connection rConn,LinkedList cPool),this.realConn=rConn;,this.connPool=cPool;,public void close(),this.connPool.addLast(this);,/.,.,一个简单的数据源,实现,DataSource(,核心代码,),class MyDataSource implements DataSource,private LinkedList connPool=new Vector();,public Connection getConneciton(),if(this.connPool.size()0),return this.connPool.removeFirst(0);,return createConnection();,private Connection createConnection(),Connection realConn=DriverManager.getConnection();,Connection myConn=,new MyConnection(realConn,this.connPool);,return myConn;,/.,.,常用的开源实现DBCP,使用,DBCP,必须用的三个包:,commons-dbcp-1.2.1.jar,commons-pool-1.2.jar,commons-collections-3.1.jar,。,Java API:BasicDataSourceFactory.createDataSource(,properties);,.,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服