JavaOOP笔记.docx
- 文档编号:5910221
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:15
- 大小:45.93KB
JavaOOP笔记.docx
《JavaOOP笔记.docx》由会员分享,可在线阅读,更多相关《JavaOOP笔记.docx(15页珍藏版)》请在冰豆网上搜索。
JavaOOP笔记
第一节
1.1、封装:
封装就是将属性私有化,提供公有的方法访问私有属性。
1.2做法是:
修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性的访问。
1.2.1如代码:
publicclassNo7_1_1{
privateStringname;//姓名
privateintage;//年龄
privateStringeducation;//学历
privateStringposition;//职位
publicStringintroduction(){
return"大家好!
我是:
"+name+",我今年"+age+"岁,学历:
"+education+",现在是:
"+position+"职位。
";
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
if(age<=0)
{
System.out.println("你输入的年龄是非法的!
默认为18");
this.age=18;
}
else
{
this.age=age;
}
}
publicStringgetEducation(){
returneducation;
}
publicvoidsetEducation(Stringeducation){
this.education=education;
}
1、2.1构造方法:
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。
2.2构造方法也称构建器(constructor)的名字和类名相同,并且没有返回值(也不能返回void,否则就是普通方法)。
如:
代码:
publicTopic(){
}
publicTopic(Stringtitle,StringContent,StringpiblishTime){
this.setTitle(title);
this.setContent(Content);
this.setPiblishTime(piblishTime);
}
2.2.1构造方法主要是完成对象初始化。
2.2.2我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。
如:
代码:
publicstaticvoidmain(String[]args){
Topictopic2=newTopic("Java基础","爱你就要学习你!
","2010-5-315:
23:
29");
topic2.getTopicInfo();
}
2.2.3Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。
如:
代码:
publicstaticvoidmain(String[]args){
Topictopic=newTopic();
topic.getTopicInfo();
}
2、3.1方法重载(overload):
方法名相同,参数项不同,就认为一个方法是另一个方法的重载方法。
3.2方法重载是指多个方法具有相同的名字,但是这些方法的参数必须不同(或者是参数的个数不同,或者是参数类型不同)。
3.3返回类型不能作为方法重载的条件。
publicTopic(){
}
publicTopic(Stringtitle,StringContent,StringpiblishTime){
this.setTitle(title);
this.setContent(Content);
this.setPiblishTime(piblishTime);
}
/*
*方法重载
*/
publicTopic(Stringtitle,StringContent){
this.setTitle(title);
this.setContent(Content);
}
3.4构造方法重载是方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为!
3、java访问权限修饰符
修饰符
同一个类中
同一个包中
子类中
全局
private
Yes
default
Yes
Yes
protected
Yes
Yes
Yes
public
Yes
Yes
Yes
Yes
继承
super关键字
1、super可用于访问父类中定义的属性
2、super可用于调用父类中定义的成员方法
3、super可用于在子类构造器中调用父类的构造器
4、super可用于在子类重写方法中调用父类的被重写方法
第二节
1、多态:
多态是面向对象的核心。
1.1、多态是具有表现多种形态的能力的特征。
(多态的定义)
术语化说法:
同一个实现接口,使用不同的实例而执行不同的操作!
1.2、如何实现多态:
1.21、子类重写父类的方法(AccpJavaTeacher2、AccpDotNetTeacher2……都是AccpTeacher的子类,他们都重写AccpTeacher类的giveLesson()方法,因此具有不同的方法实现)
如代码:
publicclassHQ3{
/*
*对教员进行评估,评估内容:
自我介绍、授课
*/
publicvoidjudge(AccpTeachert){
t.introduction();
t.giveLesson();
}
publicstaticvoidmain(String[]args){
HQ3hq3=newHQ3();
hq3.judge(newAccpJavaTeacher2("吴焕标","天河中心"));
hq3.judge(newAccpDotNetTeacher2("标标","北京中心"));
hq3.judge(newAccpDBTeacher("ACCP","北京中心"));
}
1.22、把父类类型作为参数类型,该父类及其子类对象作为参数传入
所有的子类都可以作为参数传入(这样就避免每个子类类型编写相应的judge()方法)
1.23、运行时,根据实际创建的对象类型动态决定使用哪个方法。
(一般称为动态绑定)
2.0、小结:
多态性与继承、方法重写密切相关,在方法中接收父类类型作为参数,在方法实现中调用父类的各种方法,当把子类对象作为参数传递给这个方法时,Java虚拟机会根据
实际创建的对象类型。
2、抽象类:
1、作为类的修饰符abstract和final,两者不可同时出现在类的声明中,因为final将限制一个类被继承,而抽象类却必须被继承。
2、抽象类不能被实例化
3、抽象类中最常见的成员就是抽象方法,一个类中只要有一个abstract抽象方法,这个类就一定要声明为abstract抽象类。
publicinterfaceQc{
//检查是否过期
publicabstractvoidCheckFood(Datedate);
}
4、抽象类中也可以包含供所有子类共享的非抽象的成员变量和成员方法。
继承抽象类的非抽象子类只需要实现其中的抽象方法,对于非抽象方法既可以直接继承,也可
以重写
时间强制转换实现:
publicstaticvoidmain(String[]args){
SimpleDateFormatsf=newSimpleDateFormat("yyyy/MM/dd");
try{
Foodfood=newFood("东北大米","32","又白又好吃!
嗯……不错!
",10,sf.parse("2010/05/04"));
food.showInfo();
food.CheckFood(sf.parse("2010/08/01"));
}catch(ParseExceptionex){
ex.printStackTrace();
}
2、接口
1、接口是用关键字interface来定义的,接口是抽象类的变体。
接口中的所有方法都是抽象的,没有一个有程序体。
接口只可以定义publicstaticfinal成员常量或publicabstract方法(通常省略了publicstatic/final)。
2、一个Java类可以实现多个Java接口,这也解决了Java类不支持多重继承带来的弱点。
第三节
一、异常处理
不要指望你的程序永远不会出错
1.1Java程序运行过程中所发生的异常事件可分为两类:
1、错误(Error):
JVM系统内部错误、资源耗尽等严重情况
2、异常(Exception):
其它因编程错误或偶然的外在因素导致的一般性问题,
例如:
对负数开平方根
空指针访问
试图读取不存在的文件
网络连接中断
1.2常用异常:
RuntimeException
ArithmeticException:
数学计算异常
NullPointerException:
空指针异常
NegativeArraySizeException:
负数组长度异常
ArrayOutOfBoundsException:
数组索引越界异常
ClassNotFoundException:
类文件未找到异常
ClassCastException:
造型异常
IOException
FileNotFoundException:
文件未找到异常
EOFException:
读写文件尾异常
MalformedURLException:
URL格式错误异常
SocketException:
Socket异常
2、异常(Exception)三大类(try/catch、throws、throw)
2.1、
利用try{……}catch(?
){……}或try{……}catch(?
){……}finally{……},在异
常处自行处理;
如代码:
try{
out=newFileOutputStream(file);
System.out.println("?
?
?
?
?
?
?
?
?
?
?
");
out.write("?
?
?
?
?
?
!
".getBytes());
System.out.println("?
?
?
?
?
?
?
?
?
?
!
?
?
?
:
"+file.getName()+","+file.getAbsolutePath());
}catch(FileNotFoundExceptione){
System.out.println("?
?
?
?
?
?
!
");
}catch(IOExceptione){
System.out.println("?
?
?
?
?
?
?
!
");
}finally{
//?
?
?
?
?
try{
out.close();
}catch(IOExceptione){
System.out.println("?
?
?
?
?
?
?
!
");
}
}
通过throws抛异常,由调用者来处理异常;(throws跟在方法体后外写)
如代码:
//?
?
throws?
?
?
?
?
?
?
?
?
?
publicintDivide2(intx,inty)throwsException{
No=x/y;
returnNo;
}
//?
throws?
?
?
?
?
?
?
?
?
publicstaticvoidmain(String[]args){
Dividedivide=newDivide();
divide.Divide1(3,0);
try{
divide.Divide2(3,0);
}catch(Exceptione){
System.out.println("?
?
?
?
?
?
?
00!
");
}
通过throw显示抛异常,在方法体里面,必须与关键字new一起使用;
如代码:
//?
?
throw?
?
?
?
?
?
?
?
?
?
publicintDivide3(intx,inty){
if(y==0){
try{
thrownewException();
}catch(Exceptione){
System.out.println("?
?
?
?
?
?
?
000!
");
}
}else{
No=x/y;
}
returnNo;
}
3、文件流
流主要分为两种:
1、字符流(写入较大文件时用)
2、字节流(主要用于处理一些较小文件)
见文件流代码:
publicclassFileWrite{
publicstaticvoidmain(String[]args){
FileWritefilewrite=newFileWrite();
filewrite.WriteFile();
}
publicvoidWriteFile(){
//?
?
?
FileOutputStreamout=null;
//?
?
?
?
Filefile=newFile("D:
/text.txt");
if(file.exists()){
System.out.println("?
?
?
?
?
!
");
}else{
try{
file.createNewFile();
System.out.println("?
?
?
?
?
?
!
");
}catch(IOExceptione){
System.out.println("?
?
?
?
?
?
!
");
}
}
//?
?
?
?
try{
out=newFileOutputStream(file);
System.out.println("?
?
?
?
?
?
?
?
?
?
?
");
out.write("?
?
?
?
?
?
!
".getBytes());
System.out.println("?
?
?
?
?
?
?
?
?
?
!
?
?
?
:
"+file.getName()+","+file.getAbsolutePath());
}catch(FileNotFoundExceptione){
System.out.println("?
?
?
?
?
?
!
");
}catch(IOExceptione){
System.out.println("?
?
?
?
?
?
?
!
");
}finally{
//?
?
?
?
?
try{
out.close();
}catch(IOExceptione){
System.out.println("?
?
?
?
?
?
?
!
");
}
}
第四节
1、log4j
1.1、Log4j的使用
以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:
1、建立Logger实例:
语法表示:
publicstaticLoggergetLogger(Stringname)
实际使用:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName());
2、读取配置文件:
获得了Logger的实例之后,接下来将配置Log4j使用环境:
语法表示:
BasicConfigurator.configure():
自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure(StringconfigFilename):
读取使用Java的特性文件编写
的配置文件。
DOMConfigurator.configure(Stringfilename):
读取XML形式的配置文件。
实际使用:
PropertyConfigurator.configure("ServerWithLog4j.properties");
3、插入日志信息
完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。
语法表示:
Logger.debug(Objectmessage);//调试信息
Logger.info(Objectmessage);//一般信息
Logger.warn(Objectmessage);//警告信息
Logger.error(Objectmessage);//错误信息
Logger.fatal(Objectmessage);//致命错误信息
实际使用:
logger.info("ServerSocketbeforeaccept:
"+server);
输出日记如:
publicintDivide3(intx,inty){
if(y==0){
try{
thrownewException();
}catch(Exceptione){
Loggerlongger=Logger.getLogger(this.getClass().getName());
BasicConfigurator.configure();
longger.warn("?
?
?
?
?
?
?
0!
");
//System.out.println("?
?
?
?
?
?
?
000!
");
}
}else{
No=x/y;
}
returnNo;
}
二、JDBC
1.通过Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")方法加载数据库驱动(DatabaseDriver)
2.利用DriverManager.getConnection(
"jdbc:
sqlserver:
//localhost:
1433;DatabaseName=shopping;user=sa;password=sa")方法获得数据库连接(Connection)
3.通过Connection创建Statement,再利用Statement执行SQL语句
4.查询结果则通过ResultSet对象获得结果集
5.最后依次关闭数据库
如代码:
publicstaticvoidmain(String[]args){
Connectionconn=null;
Statementstat=null;
ResultSetrs=null;
try{
//1?
?
?
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")?
?
?
?
?
?
?
?
?
(DatabaseDriver)
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2?
?
DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=shopping;user=sa;password=sa")?
?
?
?
?
?
?
?
?
(Connection)
conn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=shopping;user=sa;password=sa");
//3?
?
?
Connection?
?
Statement,?
?
?
Statement?
?
SQL?
?
stat=conn.createStatement();
//4?
?
?
?
?
?
?
?
ResultSet?
?
?
?
?
?
?
rs=stat.executeQuery("select*fromtb_books");
System.out.println("================?
?
?
?
==============");
while(rs.next()){
System.out.println("ISBN:
"+rs.getString("isbn"));
System.out.println("?
?
:
"+rs.getString("name"));
System.out.println("?
?
:
"+rs.getDouble("price"));
System.out.println("*****************************");
}
//5?
?
?
?
?
?
?
?
?
?
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(rs!
=null){
rs.close();
}
if(stat!
=null){
stat.close();
}
if(conn!
=null){
conn.close();
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
第五节
1、分层与项目
1.1、分层:
界面层:
UI
实体层:
entity
操作DB层:
Dao
业务逻辑层:
bo/manager
工具层:
util
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaOOP 笔记