Java软件学习基础.docx
- 文档编号:27608733
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:31
- 大小:42.73KB
Java软件学习基础.docx
《Java软件学习基础.docx》由会员分享,可在线阅读,更多相关《Java软件学习基础.docx(31页珍藏版)》请在冰豆网上搜索。
Java软件学习基础
IOTEK
Java高级
授课笔记
2015/5/25
本文档为学员了解教员整体授课内容,教学大纲,重难点内容的参考授课,可以用来预习,复习及自我检测。
目录
一、面向对象编程(OOP):
封装2
二、面向对象编程(OOP):
继承5
三、面向对象编程(OOP):
多态6
四、Java类高级特性7
五、异常8
六、集合8
七、IO文件操作9
八、XML解析9
九、线程10
十、网络编程10
十一、数据库sqlite、JDBC11
十二、设计框架MVC16
Java高级课程主要讲述使用Java语言编写各类应用的典型技能。
包括以下内容:
●面向对象编程三大特性(OOP):
封装、继承、多态
●内部类,String和相关类,常用API
●异常
●集合
●IO
●XML
●线程和网络编程
●数据库
●设计框架MVC
一、面向对象编程(OOP):
封装
1.类和对象
类:
抽象的,通用的。
所有拥有相同属性和方法的对象的模板称为类
对象:
具体的,实际的。
一切事物皆对象
抽象:
提取事物需要关注的部分,忽略不需要关注的部分的过程。
抽象类模板的过程:
属性:
名词性,状态,能用内存保存的
方法:
动词性,过程,走某个流程或算法
例:
学生类抽象属性和方法编写类模板创建类对象调用属性和方法实现功能
类模板语法(完整):
/**
*类模板:
每个学生都会有的属性和方法
*@authorAdministrator
*
*/
publicclassStudentIotek{
//1.属性
privateStringstuName;
privateintstuAge;
privateStringstuSex;
//2.构造方法
/**
*无参构造方法
*/
publicStudentIotek(){
}
/**
*有参构造方法
*@paramstuName
*@paramstuAge
*@paramstuSex
*/
publicStudentIotek(StringstuName,intstuAge,StringstuSex){
this.stuName=stuName;
this.stuAge=stuAge;
this.stuSex=stuSex;
}
//3.getter/setter方法(获取/设置)
publicStringgetStuName(){
returnstuName;
}
publicvoidsetStuName(StringstuName){
this.stuName=stuName;
}
publicintgetStuAge(){
returnstuAge;
}
publicvoidsetStuAge(intstuAge){
if(stuAge<0||stuAge>120){
System.out.println("年龄只能在1-120");
return;
}
this.stuAge=stuAge;
}
publicStringgetStuSex(){
returnstuSex;
}
publicvoidsetStuSex(StringstuSex){
this.stuSex=stuSex;
}
//4.类的方法(实例/静态)
publicvoidsayHello(){
//所有实例的方法可以调用实例的属性和方法
System.out.println("Name:
"+stuName);
System.out.println("Age:
"+stuAge);
System.out.println("Sex:
"+stuSex);
}
publicvoidother(){
System.out.println("other");
}
@Override
publicStringtoString(){
return"StudentIotek[stuName="+stuName+",stuAge="+stuAge
+",stuSex="+stuSex+"]";
}
}
2.对象的创建和使用
类名对象名=new类名();//根据类模板创建类的对象
对象名.方法();//使用对象调用方法
3.封装
类的封装(类模板怎么写)
访问修饰符:
public(公共的,哪里都可以访问),private(私有的,只有本类模板中可以访问)
属性封装:
(getter/setter方法)我是什么对象,我有什么(构造时传入)
常见属性:
读写/只读(只有getter)
方法封装:
我是什么对象,我能做什么
静态方法:
和实例无关,仅仅是去走代码
实例方法:
对应每个对象,能使用当前对象的属性
构造方法:
跟类同名,不带返回类型的特殊方法,在new对象时被自动调用,分为有参和无参。
this关键字:
写在类模板中的实例方法中(包括构造方法),用于指代当前实例对象,this的作用:
避免歧义;使代码编写更快速高效
Java常用APIs:
String类常用方法:
length,charAt,indexOf,equals,compareTo,substring,split
Math类常用方法:
sqrt,abs,max,floor,ceil,pow,random
Random类常用方法:
nextInt,nextDouble
打包和导包
常用包:
java.lang–默认加载包,String,StringBuffer,StringBuilder,Math
java.util–应用包,Random,Scanner
java.io–文件操作,IO操作
java.sql–数据库类
java.awt–GUI早期组件,如Button,Panel
javax.swing–GUI后期组件,如JFrame,JButton,JPanel
final:
最终的,不可改变的
类,以final修饰,意思是不可被继承的最终类
属性,以final修饰,常量,最终的,定义同时必须有值,且不可改变
方法,以final修饰,方法不可被子类继承时重写
static:
静态的,不跟随实例的
类,不可以static修饰,仅可以使用public,final,abstract修饰类
属性,以static修饰,静态属性,不跟随实例,调用时类名.属性名
方法,以static修饰,静态方法,不跟随实例,调用时类名.方法名()
字段:
finalstatic的属性,通常是用一个全大写的名称来代替一个值,使代码更可阅读和方便维护
二、面向对象编程(OOP):
继承
继承语法
publicChildextendsFather{
}
子类父类构造顺序:
先创建父类对象,后创建子类对象
super关键字两种用法
super()写在子类构造方法中,调用父类有参或无参构造方法(如不写,则默认调用父类无参,父类无参默认要写),调用语句必须在子类方法的第一句
super.写在子类实例方法中,用于调用父类实例属性和方法
访问修饰符(四种访问修饰符对比)
public,protected,privete,默认(不写)
对于class,只能是public或默认(包内)
对于属性,方法:
四种访问修饰符都能用,意义不同
重载(overload):
同一类模板中,同名不同参的方法,仅有返·回类型不同的不能称为重载,无参和有参构造方法是典型的重载
重写(override):
子类模板中,重写父类同名同参的方法,访问修饰符必须大于等于父类方法(调用时,如有子类重写方法,则调用重写方法,如无,则调用父类方法)
里氏替换原则(上转型,下转型,instanceof)
父类引用可以指向一个子类实例。
体现is-a的关系。
Teacherteacher=newCTeacher();//上转型(自动)
if(teacherinstanceofCTeacher){//下转型(先判断,后强转)
System.out.println("CTeacheris-aCTeacher");
CTeacherct=(CTeacher)teacher;
ct.sayHello();
ct.sayHello("hi");
}
所有类的父亲Object
notify,notifyAll,wait…都是和线程相关的
通用方法包括equals,hashCode,getClass,toString
结论:
如果想改变对象在输出语句中的内容,需要重写toString方法,如果想按自己的逻辑比较两个相同对象,需要重写equals方法。
三、面向对象编程(OOP):
多态
动态调用,广义多态包括重载和重写,狭义多态仅指重写。
重写:
对多个同类对象下达同样命令时,根据重写方法不同,而有不同执行结果的过程。
多态实现一:
直接重写(子类直接重写父类同名同参的方法),父类new一个子类对象,通过父类方法调用子类重写方法
多态实现二:
抽象类抽象方法重写
多态实现三:
接口重写
1.直接重写
子类重写父类同名同参方法,通过里氏替换原则实现动态调用。
Teacher[]teachers=newTeacher[2];
teachers[0]=newCTeacher();
teachers[1]=newJavaTeacher();
for(inti=0;i //如果方法没被重写,则调用父亲的,重写过,则调用子类的 //多态: 对多个同类对象下达同样指令,而有不同执行结果 teachers[i].giveLesson(); } 2.抽象类抽象方法重写 a.抽象基类不能够实例化 b.抽象方法必须在抽象类中 c.实现抽象类继承,必须重写基类抽象方法 d.抽象方法只声明不实现(无方法体) 通过抽象基类new子类,调用父类.抽象方法()实现多态 抽象类抽象方法和直接重写的异同点? 接口 3.接口重写 a.接口是一套规范,接口中只声明方法(抽象方法public,abstract) b.实现接口,就具有了接口的功能(实现接口,扩展了类功能) c.接口可以实现多个,间接弥补了Java单继承的缺陷 Java常用接口 Collection,List,Iterable,Set Connection,Statement,PreparedStatement Comparable,Comparator,Runnable Arrays.sort(ary);//排序数组是对象数组,需要对象类实现Comparable接口 Arrays.sort(ary,Comparator());//需要写一个类实现Comparator接口,可以用于同时排序多种 4.抽象类和接口的异同点 相同点: 都是多态的实现方式,都实现了重写 抽象类和具体实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类和子类在概念上应该是相同的。 接口和实现类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为 抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。 对于接口和抽象类的选择,反映出设计人员看待问题的不同角度。 抽象类用于一组相关的事物,表示的是“isa”的关系;而接口用于一组不相关的事物,表示的是“likea”的关系 抽象类和具体实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类和子类在概念上应该是相同的。 接口和实现类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为 抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。 对于接口和抽象类的选择,反映出设计人员看待问题的不同角度。 抽象类用于一组相关的事物,表示的是“isa”的关系;而接口用于一组不相关的事物,表示的是“likea”的关系 多态总结: 1.父类可以new一个子类;抽象类可以new一个继承类;接口可以new一个实现类; 2.当方法的参数是一个抽象类,实参可以填一个抽象类的继承类实例 3.当方法的参数是一个接口,实参可以填一个接口的实现类实例 四、Java类高级特性 1.内部类 外部类又叫Topclass顶级类,通常必须是public的 包含在外部类中的不带static的内部类,叫成员内部类 包含在外部类中static修饰的内部类,叫静态内部类 重点: 怎样在成员内部类(实例)方法中访问外部类(实例)对象? Outter.this.属性(方法) 怎样在测试类中创建内部成员类对象? Innerinner=outer.newInner();//需要导包,内部类在外部不可见 匿名内部类: 当某个方法的参数是抽象类或者接口时,在调用处直接new这个抽象类或接口,使用局部重写方法实现的方式,称为匿名内部类,这类语法在Java/Android中极其常见! 2.装箱和拆箱 引用类型和基本数据类型之间的转换,称为装箱拆箱 常用包装类: Integer,Double,Character,Boolean,Float 装箱操作: int->Interger 拆箱操作: Integer->int 总结: 字符串转基本数据类型: 包装类.parseXXX(Stringstr)方法 基本数据类型转字符串: String.valueOf(基本数据类型)方法 如: ”123”->123调用inti=Integer.parseInt(“123”) 3.枚举 早期代码,简单了解即可不需掌握。 枚举类中可以有普通属性和方法,枚举类的构造方法必须私有,枚举变量定义语法: Colorcolor=Color.BLUE;//枚举类型变量名=枚举类型.枚举值 4.常用包,常用类 String,StringBuilder,StringBuffer异同点 String–不可变字符串,常用方法为索引,查找,比较等不改变字符串内容的方法 StringBuilder,StringBuffer都是可变字符串对象,需要new,常用方法基本一样,如追加,插入,替换,截取子字符串等等 CharSequence接口为String,StringBuilder,StringBuffer的统一接口 五、异常 程序中可能出现的错误,使用异常处理机制处理后,能够保证代码的健壮性,使程序可以正常运行。 异常的两种主要处理机制: 捕获: try-catch-finally 抛出: throw,throws 规则: 把可能发生异常的代码段,放置在try块中,预计可能引发的异常,使用多重catch(由子到父,通常最后一个是异常基类Exception)捕获和处理。 finally是无论异常触发与否都会执行的代码段。 如果异常不能主动被捕获,可以用条件判断,并主动抛出异常再做处理–throw关键字,捕获的异常类必须大于等于抛出的异常类 常见异常类: 受查: Exception的子类,但不是RuntimeException的子类,必须强制捕获 IOException SQLException ClassNotFoundException 非受查异常: RuntimeException包括它的所有子类 NullPointExcetion InputMismatchException NumberFormatException ArrayIndexOutOfBoundsException ArithmeticException IllegalArgumentException 六、集合 集合框架图(重中之重! ! ! )--记住每个接口的意思和常用方法 Iterable–迭代器,实现此接口,对象可以foreach,方法iterator() Collection–集合,常用方法add,clear,remove,size,toArray List–有序集合,方法除Collection的以外,get,set,indexOf等与索引有关的 重要实现类: ArrayList: 内部是数组,顺序添加,遍历,索引效率较高 LinkedList: 内部是链表,中间插入,中间删除效率较高 Set–一个不包含重复元素的collection,最多包含一个null元素 Set本身为无序集合,如果需要排序,使用TreeSet Map–键值对映射,键不能重复,根据唯一的键来查找值,键和值的类型需要指定。 常用方法put,containsKey,get,size,clear,keySet,values,entrySet… Collections.sort方法: 自然排序(默认排序): 在要排序对象模板类中实现Comparable接口,调用时使用Collections.sort(List 指定排序: 在同一段代码或同一个界面需要实现2种以上排序的,调用时使用Collections.sort(List @Override publicintcompare(Studento1,Studento2){ returno2.getName().compareTo(o1.getName()); } }),实现局部匿名内部类重写compare方法 七、IO IO基本概念 Stream–动态从一头将数据传输到另一头的过程(多数流不会自动刷新,需要在流关闭时,或使用刷新方法才能传输到另一头) 字节流–不定长的流,与之相关的文件叫二进制文件或数据文件 字符流–定长的流,每个单元都是字符,字符流相关的文件叫字符文件,或文本文件 参考系–所有IO中读或者写,输入或者输出的参考系都是内存 二进制: InputStream/OutputStream 文本: Reader/Writer 举例: 程序->文本文件: Writer 文本文件->程序: Reader 程序->网络(二进制): OutputStream 二进制文件->程序: InputStream File类常用方法 字符流常用类和方法(名字中有Reader/Writer的类) FileReader/FileWriter BufferedReader/BufferedWriter 字符流常规操作: 把需要写入的信息变为字符串String,通过类的方法write写入一行或多行,中间用自定义格式分割,读取时按照分割规律解析和还原,注意,所有信息都是以字符格式写出和读入。 当使用文件作为持久存储时,建议多次保存(增删改时),一次加载(UI初始化时)。 字节流常用类和方法(名字中有InputStream/OutputStream的类) FileInputStream/FileOutputStream ObjectInputStream/ObjectOutputSteam 转换类 InputSteamReader/OutputSteamWriter 八、XML解析 1.原理和概念: XML(扩展标记语言); 以特殊的文本格式记录数据的一种方式,多数使用是手动编写,程序动态读取 也可以用来作为持久化信息存储的一种方式,或网络传输少量数据,学习重点是解析 2.DOM解析 核心代码: DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); DocumentBuilderbuild=factory.newDocumentBuilder(); Documentdocument=build.parse("stu.xml"); //获取文档解析根节点 Elementelement=document.getDocumentElement(); Noderoot=(Node)element; //获取节点名称 System.out.println(root.getNodeName()); 最重要的类Node(org.w3c.dom.Node) 重要方法: getNodeName,getChildNodes,getAttributes,getTextContent... 3.SAX解析 核心代码: 编写内部类,或新建一个类,重写几个默认处理方法 startDocument endDocument startElement: 重要参数: qName endElement: 重要参数: qName characters: newString(char[],intstart,intlen) 核心代码: SAXParserFactoryfactory=SAXParserFactory.newInstance(); SAXParserparser=factory.newSAXParser(); //MyHandler为自定义类,继承自DefaultHandler,重写至少三个主要方法 parser.parse("stu.xml",newMyHandler()); 九、线程 进程: 一个运行中的应用程序 线程: 一个进程中的多条执行路径,每个进程默认会创建一个主线程 使用线程的场合: 1.阻塞操作;2.延时操作;3.IO操作等… 线程状态: 1.新生态;2.就绪态;3.运行态;4.阻塞态;5.死亡态; 线程的常规写法: 1.基本都会有循环; 2.基本都有延时操作sleep; 3.线程一旦启动不能使用方法去终止,通常使用改变循环条件结束线程 线程类主要方法: 构造方法,Thread.sleep,Thread.currentThread,th.start(); 一十、网络编程 Tcp/IP传输控制协议/网际协议 UDP用户数据报协议 1.Tcp服务器,客户端通讯过程 a.服务器ServerSocketserver=newServerSocket(intport); Socketsocket=server.accept();//阻塞,客户端连接上后结束阻塞,需要线程单独处理 b.客户端Socket
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 软件 学习 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)