Java第六章(面向对象 下)课后小结

1. 实验:利用IDE的debug功能给例6.4和例6.5的new语句设置断点,使用单步调试(step into/step over)跟踪子类对象实例化(初始化)的执行顺序,并总结该过程。

例6.4

class AddClass
 {
  public int x=0,y=0,z=0;
  AddClass (int x) 
    { this.x=x;   }
  AddClass (int x,int y) 
    { this(x);  this.y=y; }  //调用第一个构造方法
  AddClass (int x,int y,int z) 
    { this(x,y); this.z=z; } //调用第二个构造方法
  public int add()
    {return x+y+z; }
 }
 
public class SonAddClass extends AddClass
  { int a=0,b=0,c=0;
     SonAddClass (int x) 
       {   super(x);      a=x+7;    }
    SonAddClass (int x,int y) 
       {   super(x,y);    a=x+5;   b=y+5;   }
    SonAddClass (int x,int y,int z)
       {   super(x,y,z);  a=x+4;   b=y+4;  c=z+4;}
    public int add()
    {System.out.println("super:x+y+z="+super.add());
     return a+b+c;
	 }
    public static void main(String[] args)
    { SonAddClass p1=new SonAddClass (2,3,5); 
      SonAddClass p2=new SonAddClass (10,20);
      SonAddClass p3=new SonAddClass (1);
      System.out.println("a+b+c="+p1.add());
      System.out.println("a+b="+p2.add());
      System.out.println("a="+p3.add());
    }
}

程序从main函数开始,执行“p1=new SonAddClass(2,3,5);”时,调用SonAddClass的含有三个参数的构造函数,然后首先调用父类AddClass的含有三个参数的构造函数,在父类的构造函数的执行过程中又套娃式的分别先调用含有两个参数和含有一个参数的重载的构造函数。
“SonAddClass p2=new SonAddClass(10,20);
SonAddClass p3=new SonAddClass(1);”
这两句的执行过程和上一句类似。
“System.out.println(“a+b+c=”+p1.Add());”
这一句在执行时先执行p1.Add(),再将“a+b+c=”输出。

运行结果
在这里插入图片描述

例6.5:

class Pare 
{int i;
 Pare(){i=6;}
};

class Construct extends Pare
{ Construct(){}
  Construct(int num){}
  public static void main(String[] args){
    Construct ct = new Construct(9);
    System.out.println(ct.i);
  }
}

程序从main函数开始,执行“Construct ct=new Construct(9);”时,首先调用Construct类的带参的构造函数,然后带参构造函数调用Construct类的不带参构造函数,然后在Construct类的不带参构造函数中隐式调用父类的不带参构造函数。
“System.out.println(ct.i);
System.out.println(ct.getSuper());”
这两句分别输出了ct的属性i和从父类继承下来的属性i。

运行结果:6

2. 如何实现两个对象之间互发消息,请举例说明。

运用类的组合,把一个类的引用作为另一个类的属性

例子:

class FighterPlane {
   private String name;
   private int missileNum;   
   private A  a;
   public void setA(A _a){
      if (_a !=null)  { a = _a ;}
   }
   public A getA(){
      if (a !=null)
          { return a;}
      else  return null;
   }

   public void fire(){ ……}
   public FighterPlane(String _name,int _missileNum){ ……}
   
class A {
    FighterPlane fp;
    public A(FighterPlane fpp){
       this.fp = fpp; 
       fpp.setA(this);//将当前对象传给FighterPlane
    }
    public void invoke(){
       //A中对象发送消息给FighterPlane的对象
       fp.fire(); 
    }
}

public class  Run{
   public static void main(String[] args)
   {  
     FighterPlane ftp = new FighterPlane("su35",10);
     A  a   = new A(ftp); 
     a.invoke(); }
}

3. 谈谈组合与继承的区别以及两者的使用场景(即什么时候宜用组合 ?什么时候宜用继承?)。

1.区别:
组合:指将已存在的类作为一个新建类的成员变量类型来使用,可以调用已存在类的函数,但两个类之间无上下级关系。
继承:子类继承父类,即继承了父类的所有属性和方法,两个类之间有上下级关系。
2.使用场合:
组合:两个类之间无父子关系,只是一个类想使用另一个类的某个或某些方法函数时,则无需将类的属性和方法全部继承下来。
继承:两个类之间存在父子关系,一个类是在另一个类的基础上衍生的,需要包含另一个类的全部属性和方法。

4. Java中的运行时多态的含义是什么?有什么作用?请举例说明。

多态分为两种情况:编译时多态运行时多态
编译时多态就是我们所说的方法重载(overload)。、
运行时多态则是指方法重写(override) 可理解为一个接口,多个方法。
要实现运行时多态需要做以下两件事情:

  1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);
  2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
    使用接口类抽象类是实现多态的常用方法

即有 3 个必要条件:继承重写向上转型
作用:提高代码的使用率,使我们编写的代码简洁方便。

例子:

package homework;//homework包里

abstract public class Shapes {
	protected int x,y,k;
	protected double m;
	
	public Shapes(int x,int y,int k,double m) {
		this.x=x;
		this.y=y;
		this.k=k;
		this.m=m;
	}
	
	abstract public double getArea();
	abstract public double getPerimeter();
}
package homework;
import java.awt.*;

public class Rect extends Shapes{
	public double getArea() {
		return k*m;
	}
	
	public double getPerimeter() {
		return (2*k+2*m);
	}
	
	public Rect(int x,int y,int width,int height) {
		super(x,y,width,height);
	}
}
package homework;
import java.awt.*;

public class Triangle extends Shapes{
	public Triangle(int baseA,int baseB,int baseC) {
		super(baseA,baseB,baseC,0);
		m=(baseA+baseB+baseC)/2.0;
	}
	
	public double getArea() {
		return(Math.sqrt(m*(m-k)*(m-x)*(m-y)));
	}
	
	public double getPerimeter() {
		return (x+y+k);
	}
}
package homework;
import java.awt.*;

public class Circle extends Shapes{
	public Circle(int x,int y,int width) {
		super(x,y,width,width/2.0);
	}

	public double getArea() {
		return m*m*Math.PI;
	}
	
	public double getPerimeter() {
		return 2*Math.PI*m;
	}
}
package homework;
import java.awt.*;
import java.applet.*;

public class RunShape extends Applet {
	Rect rect=new Rect(5,15,25,25);
	Triangle tri =new Triangle(5,5,8);
	Circle cir=new Circle(13,90,25);
	
	private void drawArea(Graphics g,Shapes s,int a,int b) {
		g.drawString(s.getClass().getName()+" Area"+s.getArea(),a,b);
	}
	
	private void drawPerimeter(Graphics g,Shapes s,int a,int b) {
		g.drawString(s.getClass().getName()+"Perimeter"+s.getPerimeter(),a,b);
	}
	
	public void paint(Graphics g) {
		g.drawRect(rect.x, rect.y, rect.k, (int)rect.m);
		drawArea(g,rect,50,35);
		drawPerimeter(g,rect,50,55);
		drawArea(g,tri,50,75);
		drawPerimeter(g,tri,50,95);
		g.drawOval(cir.x-(int)cir.k/2,cir.y-(int)cir.k/2,cir.k,cir.k);
		drawArea(g,cir,50,115);
		drawPerimeter(g,cir,50,135);
	}
}

运行时多态发生在RunShape类中,父类Shapes对象引用调用子类RectTriangleCircle的对象。

5. 使用接口改写例6.8中的程序。

import java.awt.*;
import java.applet.*;

interface Shapes//接口 
{ 
	abstract public double getArea();
	abstract public double getPerimeter();
}

class Rect implements Shapes 
{ 
	protected int x,y,k; 
	protected double m;
	public double getArea()
	  { return(k*m); }
  	public double getPerimeter()
	  { return(2*k+2*m);}
  	public Rect(int x,int y,int width,int height)
	 { 
  		this.x=x;
  		this.y=y;
  		this.k=width;
  		this.m=height;
	 }
}

class Triangle implements Shapes
{   
	protected int x,y,k; 
	protected double m;
	public double getArea()
    {return(Math.sqrt(m*( m-k)*( m-x)*(m-y)));}
    public double getPerimeter()
	{return(k+x+y);}
    public Triangle(int baseA,int baseB,int baseC)
	{   
    	this.x=baseA;
  		this.y=baseB;
  		this.k=baseC;
  		this.m=0;
        //m充当了周长的一半
        m= (baseA+ baseB+ baseC)/2.0;
	}
  }

class Circle implements Shapes
{   
	protected int x,y,k; 
	protected double m;
	public double getArea()
   //Math是java.lang包中的类,PI是静态其属性,其值为Π
		{return(m* m *Math.PI);}
    public double getPerimeter()
		{return(2*Math.PI* m);}
    public Circle(int x,int y,int width)
	{
		    //m充当了半径的角色,k充当了直径
    	this.x=x;
  		this.y=y;
  		this.k=width;
  		this.m=width/2.0;
	}
}

public class RunShape extends Applet
{
	Rect rect=new Rect(5,15,25,25);
	Triangle tri=new Triangle(5,5,8);
	Circle cir =new Circle(13,90,25);
	public void paint(Graphics g)
	{ 
		//绘制矩形,输出矩形的面积和周长
		g.drawRect(rect.x,rect.y,rect.k,(int)rect.m);
		g.drawString("Rect Area:"+rect.getArea(),50,35);
		g.drawString("Rect Perimeter:"+rect.getPerimeter(),50,55);
		//输出三角形的面积和周长
		g.drawString("Triangle Area:"+tri.getArea(),50,75);
		g.drawString("Triangle Perimeter:"+tri.getPerimeter(),50,95);
		//绘制圆,输出圆的面积和周长
		g.drawOval(cir.x-(int)cir.k/2,cir.y-(int)cir.k/2,cir.k,cir.k);	
		g.drawString("Circle Area:"+cir.getArea(),50,115);
		g.drawString("Circle Perimeter:"+cir. getPerimeter(),50,135); 
	}
}

抽象类和接口的代码很相似,
不同的是用抽象类时可以把每个子类的相似属性也统一提取出放到抽象类中,而接口中只能放抽象出的方法。
因为接口中的属性是静态常量,会导致所有的实现类的对象的属性值相同,所以只能在实现类中定义相关属性。
两者相比感觉抽象类的抽象程度更高,接口的扩展性更强。

6. 自定义一个类,覆写equals方法,以满足自身业务需求

例子:
例如有一个钥匙类,id表示能打开的房门号,一个房门可能有多把备用钥匙,因此,我们覆写equals方法,要求钥匙的房门号相同就返回True。

public class Key {
	private int id;
    public Key(int id) {
       this.id = id;  
    }
    public int getId() {
       return id;
    }
    @Override
    public boolean equals(Object o) {
        return this.getId()==((Key)o).getId();
    }
    public static void main(String[] args){
        Key key1 = new Key(1);
        Key key2 = new Key(1);
        System.out.println(key1.equals(key2));
   }
}

只要两个对象的id相同,就会返回True,并不需要引用指向同一个对象。

7. 举例说明运算符instanceof的使用场景。

instanceof:二元运算符。
用法:boolean result = object instanceof class 判断对象是否为特定类的实例
在程序的运行多态中,即用父类或接口的引用去引用子类、实现类的对象时,我们想知道父类或接口的引用所引用的对象是否是某一个具体类的对象时,我们就可以用instanceof,避免向下转型抛出运行时异常。
也可以用来判断两类是否存在父类与子类的关系
例子:

Shape s = new Rect(10,30);//父类声明引用子类实例,向上转型
s = new Triangle(5,5,8);
s = new Circle(12.5);

 java.lang.ClassCastException: Circle cannot be cast to Triangle
//Triangle triangle =(Triangle)s  //向下转型抛出运行时异常
//triangle.drawTri();
        
   if(s instanceof Rect){     //避免向下转型抛出运行时异常
        Rect rectangle = (Rect)s;
        rectangle.drawRect();
   } else if (s instanceof Triangle){
        Triangle triangle =(Triangle)s;
        triangle.drawTri();
   } else if (s instanceof Circle){
        Circle circle = (Circle) s;
        circle.drawCir();
   }

8. 谈谈抽象类与接口的异同以及两者的使用场景。

异同如下图:
在这里插入图片描述
使用场景:
抽象类:抽象类在被继承时体现的是is-a关系。一般是有继承关系,但父类和子类以及各个子类之间对某些方法的实现又不同。
接口:接口在被实现时体现的是can-do关系。一般是把多个类的相同功能抽象出来,类之间没有继承关系。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
清华大学java课程学习使用教程 ★ 第一讲 Java语言概述 ◇课前索引 ◇1.1 java语言的发展史 ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结课后习题 ★ 第三讲 Java语言中的面向对象特性 ◇课前索引 ◇3.1 面向对象技术基础 ◇3.2 Java语言的面向对象特性 ◇本讲小结课后习题 ★ 第四讲 Java的例外处理和I/O流 ◇课前索引 ◇4.1 什么是例外 ◇4.2 例外的处理 ◇4.3 自定义例外类的使用 ◇4.4 I/O 流概述 ◇4.5 文件处理 ◇4.6 过滤流 ◇4.7 字符流的处理 ◇4.8 对象的串行化 ◇4.9 其它常用的流 ◇本讲小结课后习题 ★ 第五讲 AWT图形用户界面设计 ◇课前索引 ◇5.1 用AWT生成图形化用户界面 ◇5.2 AWT事件处理模型 ◇5.3 AWT组件库 ◇本讲小结课后习题 ★ 第六讲 Java的线程和Java Applet ◇课前索引 ◇6.1 线程简介 ◇6.2 多线程的互斥与同步 ◇6.3 Java Applet ◇本讲小结课后习题 ★ 第七讲 Swing用户界面设计 ◇课前索引 ◇7.1 Swing简介 ◇7.2 Swing组件和容器 ◇本讲小结课后习题 ★ 第八讲 Java网络编程 ◇课前索引 ◇8.1 网络编程基本概念,TCP/IP协议简介 ◇8.2 基于URL的高层次Java网络编程 ◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本讲小结课后习题 ★ 第十讲 JSP与Servlet
Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 拓展知识3.5 拓展训练 3.6 课后小结3.7 课后习题 3.8 上机实训 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第1页。 3.1 应用场景 在一些开源框架里,如Spring,Struts,Hibernate,MyBatis等,应用程序会提供一个配置文件如xml文件或者properties,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。 应用程序通过读取配置文件来获取到指定名称的类的字节码文件并加载其中的内容进行调用,对一个类文件进行解剖,就可以取得任意一个已知名称的class的内部信息,包括其modifiers(诸如public,static等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods。 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第2页。 3.2 相关知识 3.2.1 Java反射机制的概念 3.2.2 反射机制的功能 3.2.3 Java反射机制的相关API 3.2.4 使用反射机制的步骤 3.2.5 反射机制的应用场景 3.2.6 反射机制的优缺点 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第3页。 3.2.1 Java反射机制的概念 Java反射机制在Java运行状态中,对于任意一个类,我们都能够知道这个类的所有属性和方法;, 对于任意一个对象,我们都能够调用它的任意一个方法;。 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第4页。 3.2.2 反射机制的功能 反射机制的功能如下: 在运行时判定任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判定任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态代理;。 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第5页。 3.2.3 Java反射机制的相关API java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作。 java.lang.Class; //类 java.lang.reflect.Constructor;//构造方法 java.lang.reflect.Field; //类的成员变量 java.lang.reflect.Method;//类的方法 java.lang.reflect.Modifier;//访问权限 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第6页。 3.2.4 使用反射机制的步骤 导入Jjava.lang.relfect 包需 遵循以下3三个步骤: 第一步是获得你想操作的类的 java.lang.Class 对象; 第二步是调用诸如 getDeclaredMethods 的方法; 第三步使用 反射API 来操作这些信息。 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第7页。 3.2.5 反射机制的应用场景 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,常见的应用如下 逆向代码 ,例如反编译 与注解相结合的框架 例如Retrofit 单纯的反射机制应用框架 例如EventBus 2.x 动态生成类框架 例如Gson Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第8页。 3.2.6 反射机制的优缺点 可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分明显)。通过反射机制我们可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象,总结如下。 优点:运行期类型的判断,
<>人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象的编程语言 3 1.2.2丰富的框架技术 4 1.2.3xml、css的应用 4 1.2.4使用javascript与ajax提升用户体验 7 1.3多种集成开发环境 9 1.3.1集成开发环境简介 9 1.3.2web应用服务器说明 11 本章小结 14 课后练习 14 第2章 javaee运行及开发环境 15 2.1jdk的下载与安装 15 2.1.1jdk的下载与安装 15 2.1.2配置环境变量 17 >2.2tomcat的下载与安装 19 2.2.1下载并安装tomcat服务器 19 .2.2.2基本配置 22 2.2.3服务器页面介绍 23 2.3eclipse的下载与安装 24 2.3.1eclipse的下载与安装 24 2.3.2熟悉eclipse开发环境 24 2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个javaee应用 28 2.4.2熟悉helloworld框架结构 29 本章小结 32 课后练习 32 第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1创建工程 33 3.1.2编写程序 34 3.1.3部署应用 35 3.2认识jsp 36 3.2.1jsp的工作原理 37 3.2.2jsp注释方式 37 3.2.3jsp声明方式 38 3.2.4jsp表达式的应用 39 3.2.5jsp的脚本段 39 3.2.6jsp的编译指令 40 3.2.7jsp的动作指令 41 3.2.8jsp的内置对象 43 3.3认识servlet 46 3.3.1servlet的开发 46 3.3.2使用httpservlet 47 3.3.3servlet的生命周期 49 3.3.4load-on-startupservlet 50 3.4自定义标签库 51 3.5预处理用户请求:filter 53 3.6使用listener 56 3.7项目实战——用户登录 59 本章小结 62 课后练习 63 第4章sql与jdbc 64 4.1sql 64 4.1.1sql概述 64 4.1.2ddl与dml简介 64 4.1.3sql使用方法 65 4.2jdbc 67 4.2.1jdbc概述 67 4.2.2jdbc驱动程序 68 4.2.3使用jdbc读取数据 69 4.3项目实战——存储图书信息 73 本章小结 78 课后练习 79 第5章struts2框架基础 80 5.1mvc框架 80 5.1.1model1与model2 80 5.1.2mvc设计模式 81 5.1.3struts2框架的mvc架构 82 5.2struts2概览 84 5.2.1struts2的工作流程 84 5.2.2struts2的简单应用 85 5.3struts2基础 87 5.3.1action详解 88 5.3.2结果与视图 91 5.3.3struts.xml的配置 94 5.4值栈与ognl表达式 100 5.5struts2的标签库 103 5.5.1控制标签 103 5.5.2数据标签 104 5.5.3表单标签 105 5.5.4非表单ui标签 107 本章小结 108 课后练习 109 第6章struts2高级应用 110 6.1拦截器 110 6.1.1拦截器工作机制 110 6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3输入校验 123 6.3.1输入校验的必要性 123 6.3.2编程方式实现输入校验 125 6.3.3应用struts2输入校验框架 128 6.3.4自定义校验器 130 6.4国际化 131 6.4.1国际化实现原理 131 6.4.2准备国际化资源文件 131 6.4.3调用国际化资源文件 134 6.5上传和下载 135 6.5.1文件上传的实现原理 135 6.5.2struts2文件上传实现方式 136 6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 144 第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2struts2对velocity的支持 153 7.3应用freemarker 155 7.3.1freemarker基础 155 7.3.2struts2整合freemarker 166 7.3.3使用struts2标签设计模板 170 7.4freemarker与velocity的比较 171 本章小结 171 课后练习 172 第8章hibernate框架基础 173 8.1orm简介 173 8.1.1应用orm的意义 173 8.1.2流行的orm框架 174 8.2准备hibernate运行环境 174 8.2.1下载与安装hibernate 175 8.2.2hibernate发布包介绍 175 8.3认识hibernate 176 8.3.1hibernate框架结构 176 8.3.2hibernate配置文件 177 8.3.3configuration与sessionfactory 178 8.3.4session类 179 8.3.5hibernate中的关联关系 179 8.3.6hibernate映射文件 180 8.3.7hibernate工作原理 182 8.4项目实战——新闻内容显示 183 本章小结 186 课后练习 187 第9章hibernate查询 188 9.1hibernate的数据检索策略 188 9.1.1立即检索 188 9.1.2延迟检索 189 9.1.3预先检索 190 9.1.4批量检索 191 9.2hibernate的数据查询方式 193 9.2.1hql方式 193 9.2.2qbc方式 194 9.2.3原生sql方式 195 9.3hibernate的关联查询 196 9.3.1一对一关联关系的使用 196 9.3.2一对多、多对一关联关系的使用 197 9.3.3多对多关联关系的使用 199 9.4hibernate过滤 201 9.4.1session过滤 201 9.4.2filter过滤 201 9.5项目实战——客户订单管理 202 本章小结 207 课后练习 207 第10章hibernate性能优化 208 10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用一级缓存 214 10.2.3应用二级缓存 214 10.2.4应用第三方缓存 216 10.3项目实战——借还图书 217 本章小结 224 课后练习 224 第11章spring框架基础 226 11.1spring框架概述 226 11.1.1认识spring框架 226 11.1.2spring框架特点 226 11.1.3spring框架核心架构 227 11.2建立spring开发环境 228 11.2.1下载spring框架 228 11.2.2spring发布包与软件包 229 11.2.3创建spring应用环境 230 11.3bean的装配 231 11.3.1bean基本配置 232 11.3.2为bean添加属性 232 11.3.3简化配置 233 11.4理解spring的核心——ioc 234 11.4.1控制反转 234 11.4.2依赖注入的3种方式 236 11.5beanfactory与applicationcontext 238 11.5.1认识beanfactory 238 11.5.2使用applicationcontext 238 11.6项目实战——spring问候程序 239 本章小结 241 课后练习 241 第12章springaop 242 12.1aop基础 242 12.1.1aop与oop的比较 242 12.1.2aop的核心概念 243 12.1.3java动态代理与aop 244 12.1.4springaop简介 245 12.2使用spring的通知 246 12.2.1beforeadvice 246 12.2.2afterreturningadvice 248 12.2.3methodinterceptor 249 12.2.4throwadvice 250 12.3使用spring的切入点 251 12.3.1静态切入点 251 12.3.2动态切入点 253 12.4springaop的代理工厂 253 12.4.1选择合适的代理 253 12.4.2proxyfactory 254 12.4.3proxyfactorybean 254 12.5项目实战——输出日志 256 本章小结 258 课后练习 259 第13章 spring与javaee持久化数据访问 260 13.1spring对dao模式的支持 260 13.1.1统一的数据访问异常 260 13.1.2通用的数据访问模板及抽象支持类 261 13.2spring的jdbc 262 13.2.1为什么需要jdbctemplate 262 13.2.2通过jdbcdaosupport使用jdbctemplate 263 13.2.3jdbctemplate提供的常用数据操作方法 264 13.3spring中的事务处理 265 13.3.1spring事务处理概述 266 13.3.2编程式事务处理 266 13.3.3声明式事务处理 267 13.3.4标注式事务处理 268 13.4项目实战——公司人事管理 269 本章小结 276 课后练习 276 第14章spring与struts2、hibernate框架的整合基础 277 14.1spring与struts2的整合方式 277 14.1.1struts2应用的扩展方式 277 14.1.2spring插件的应用 278 14.2spring和hibernate的整合 279 14.2.1spring对hibernate的支持 279 14.2.2管理sessionfactory 279 14.2.3hibernate的dao实现 281 14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 15.2.1数据库分析 295 15.2.2数据表关联关系分析 298 15.3系统框架搭建 300 15.3.1创建工程 300 15.3.2工程目录结构 300 15.4系统代码实现 302 15.4.1数据库连接的实现 303 15.4.2工具类的实现 304 15.4.3管理员登录与退出实现 306 15.4.4系统管理实现 313 15.4.5图书管理实现 319 15.4.6读者管理实现 329 15.4.7借还管理实现 333 15.4.8前台功能实现 336 本章小结 342
这是清华大学的一套JAVA教程,包括详尽的例子、课后习题与解答、相关计算机英语词汇,就课程本身的内容来说也非常丰富,囊括了以下章节: ★ 第一讲 Java语言概述 ◇课前索引 ◇1.1 java语言的发展史 ◇1.2 java的工作原理 ◇1.3 一切都是对象 ◇1.4 构建java程序 ◇1.5 java程序规范 ◇1.6 建立java开发环境 ◇本讲小结课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结课后习题 ★ 第三讲 Java语言中的面向对象特性 ◇课前索引 ◇3.1 面向对象技术基础 ◇3.2 Java语言的面向对象特性 ◇本讲小结课后习题 ★ 第四讲 Java的例外处理和I/O流 ◇课前索引 ◇4.1 什么是例外 ◇4.2 例外的处理 ◇4.3 自定义例外类的使用 ◇4.4 I/O 流概述 ◇4.5 文件处理 ◇4.6 过滤流 ◇4.7 字符流的处理 ◇4.8 对象的串行化 ◇4.9 其它常用的流 ◇本讲小结课后习题 ★ 第五讲 AWT图形用户界面设计 ◇课前索引 ◇5.1 用AWT生成图形化用户界面 ◇5.2 AWT事件处理模型 ◇5.3 AWT组件库 ◇本讲小结课后习题 ★ 第六讲 Java的线程和Java Applet ◇课前索引 ◇6.1 线程简介 ◇6.2 多线程的互斥与同步 ◇6.3 Java Applet ◇本讲小结课后习题 ★ 第七讲 Swing用户界面设计 ◇课前索引 ◇7.1 Swing简介 ◇7.2 Swing组件和容器 ◇本讲小结课后习题 ★ 第八讲 Java网络编程 ◇课前索引 ◇8.1 网络编程基本概念,TCP/IP协议简介 ◇8.2 基于URL的高层次Java网络编程 ◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本讲小结课后习题 ★ 第十讲 JSP与Servlet ◇课前索引 ◇10.1 Servlet的概念、配置与运行 ◇10.2 Servlet的应用实例 ◇10.3 JSP简介 ◇10.4 JSP和Servlet的结合使用 ◇本讲小结课后习题 这套教程应该是非常酷的JAVA入门与提高的资料,它的目标就是: 通过本门课程的学习可以使学生掌握Java语言的基本语法和编程规范;尤其是掌握用Java语言进行网络编程的技巧;同时Java语言是一门面向对象的语言,通过学习可以掌握用面向对象进行编程的思想和实践,使学生成为一名合格的Java程序员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值