OSS报表系统 实训笔记 实训公司:中科天地 (王海格,老师超好) Edited by Hen Egg ,Michelangelo 2005-2-21 8:00 JasperReport 开支 面向OO 应用服务器 Java 开源数据库 J2EE 需求分析
成绩: 课堂表现 项目
项目: l Java平台 (1) (编程语言)开发环境(编译器) (2) 部署环境(应用服务器)(JDK提供软件运行服务器及基本运行条件,在此基础上的开发需要配置) 目的是重用 (相关工具类) (3) 运行环境(操作系统) --JVM虚拟机是操作系统,即运行环境 --Java包 文件性 --垃圾收集 内存管理 --虚拟cpu (优势) --线程
(1)+(2)+(3) 统一环境 简单开发
l Java语言 1. OO(最重要的特征)——很大的系统 2. 可移植性JVM (并不重要) 3. 分布式 JVM+AppServer ——跨平台的系统 充分利用网络资源 跨地域跨国界 4. 安全性 Unix:安全性强类型 JVM内置强安全性 >Unix 关键业务 1. 人命 医疗 检查公安 重型工业 航空 2. 钱 银行
小结: JVM是操作系统 Java是面向对象,分布式,安全的语言
PS:以上红字粗体部分为java关键技术
l Java虚拟机 1.垃圾收集 2.分布式 支持各种协议 3.多线程 线程管理 4.安全性
概念 模拟了一台计算机
功能 1.垃圾回收: (在内存中)new的对象被装载到对象堆中
A = new Air; new 出一个对象 调用构造函数,分配在对象堆中 返回一个引用 引用计数器++ 当计数器减为0,该变量变成垃圾,从名单里除去。 垃圾收集作用:内存泄漏,空指针 垃圾收集机制: 后台精灵线程:当CPU出现闲置,调用该线程(优先级低) 要求CPU很快 有闲置的时候(用Java 先CPU再内存再次网卡)
2.提供运行时环境 操作系统的功能,负责调入代码,监督代码运行,帮助程序做输入输出,给程序提供一系列的支持 提供 CPU 寄存器 网络读写 文件系统 安全性
Class Loader 加载 Byte Code Verifier文件格式 语法 数组越界 校验4遍 Interpreter: 中间代码 JIT 即时编译 (快)(编译成本地代码)
安装jdk 配置环境变量 JAVA_HOME c:\j2sdk Path ;%JAVA_HOME%\bin CLASSPATH .;%JAVA_HOME%\lib (ps:dos窗口不能自动刷新,改变环境变量后记得重新开) 14:00 类: 自定义 抽象
包: package 把功能相近的类组合在一起 包是相对路径,相当于windows里的文件夹 import一个包 就引入了一个命名空间 import不等于include 没写包的话,系统默认一个包
Java代码三部分 1) package com.project.src 2) import java.io.*; 3) 类 一个文件里可以有多个类,但是有且只有一个public类
eg1 1. static void main(String []args) Main method is not public
2. public void main(String []args) Exception in thread "main" java.lang.NoSuchMethodError: main main是整个程序的入口,不能用new出来 由于是static方法所以在载入内存时便直接执行 以此作为其他程序的入口 但main不是关键字
3. public static main(String []args) TestHelloWorld.java:4: invalid method declaration; return type required public static main(String[] args) java规定必须有范围类型,没有返回值必须定义为void。但是构造函数不允许有返回类型。
4. public static void main(String []args) == static public void main(String []args) 访问控制符和修饰符位置任意。但习惯把访问控制符放前面
5.但是返回类型 不能放在上面两者前面 TestHelloWorld.java:4: <identifier> expected void static public main(String[] args) ^ TestHelloWorld.java:8: '(' expected //返回值必须贴紧方法名 } ^ 2 errors main不是关键字,但是自己不要用它。 6. String[] args 从arg[0]开始
注释: 调程序用 // /* */ javadoc注释 /** */ 用javadoc变成文档 javadoc HelloWorld.java –d doc
Java关键字&标识符&保留字 标识符 开头:字母(_, $) 编码规范: 1) 有意义的单词组成,第一个单词第一个字母小写,其他单词第一个字母大写 2) 变量名和方法名同等处理。 3) 常量由有意义的单词组成,所有单词全大写,单词之间用下划线分开。 4) 类名第一个字母大写
Java数据类型 1. 基本数据类型(不是对象) 8种: int, long, short, byte, float, double, char, bool. 2. 引用类型 对象只能通过引用访问 实际上是安全的指针 数组是引用类型(因为他在C语言里是指针类型) 默认: Char ‘\u0000’ bool false 引用 null 数组 null
表达式和流程控制 不要用++ --,容易引起误读 除了在循环里面 =与==: ==只能用于基本类型,不要用于引用类型。equals 短路运算符: if (lasting!=null)&&,|| 把概率最高的判断放在前面,节省程序执行的时间
类型转换 高位转低位,必须进行强制类型转化 ,short与char的转换总要
传参和传值 基本类型传值 引用类型传引用 传的是变量的副本
控制流程,循环 最好不要用switch (破坏封装,消耗性能,破坏流程) 分支尽量用if else 循环尽量用for while(true)在服务器中,做死循环用 别用do-while
练习1 强制类型转换
练习2 传参
2005-2-22 8:00 l Java OO 最早的面向对象Smalltalk, 后来的C++, Java, Phyon, .NET Smalltalk纯的 Java不纯(基本类型等) Java是对面向对象的一个实现
对象 -> 数据 <- 操作
对象之间的关系 –> 消息
OO: 按符合人的思维习惯的逻辑来分析设计,形成了一套模式,即面向对象体系。
注意: 1. 不要去继承有代码的类。有代码的类请用对象的组合. 2. 继承抽象基类或接口(n个)。接口设计完,不能减少和修改,只能增加. 3. 多重继承本身没错,必不可少,但要限制多重或单继承,破坏封装性.
多态: 技术实现: 1. 编译时:SRC 检查形式类型(声明) 2. 运行时:JVM 检查实际类型
重载: (编译时) 处理相同的方法名,不同的参数列表 在编译器里用方法签名区别。(method signature,由方法名+参数列表组成) 不要用运算符重载
14:00 类(实用类): 1. 类头 只有public 和 默认的,没有私有类 2. 属性 static 只保留一份拷贝。与类代码保存在一起 静态属性的构造方法: static {}块。 non-static 3. 方法 4. 构造方法(不是类的基本结构) 5. static块
l 类的定义 [权限][修饰] class 类名 [extends 父类名][implements 接口列表] { 类体; }
权限: 有 public —— 公有类 无 public —— 同包类 修饰: abstract 抽象类,只能被继承(如果一个类里面有一个抽象方法,则这个类必须是抽象类。反之,抽象类不一定包含抽象方法)不能实例化 final 终极类,完美类,不能被继承。只能实例化
ps: 1:一般静态变量被定义成常量 2:用静态方法不能访问实例变量,static 3:native 在java中调用本地c代码 4:构着方法:选择native(高级) 5:接口作为引用类型来使用,任何实现该接口的实例都可以存在该接口类型的变量中.
数据成员: [权限][修饰] 类型 变量名[= 初值]; 修饰: static 有 —— 类变量(类名点取) static 无 —— 实例变量 (对象名点取) final 用于修饰常量 static final int N=5; (90%以上用到static,就加final把它变成常量。光static破坏封装性)
方法成员: [权限][修饰] 返回值类型 方法名(行参列表) (传值不传参) { 方法体; }
修饰: static (静态方法不能访问实例对象) final (不允许重载) (用不到) abstract (该类必须声明为抽象类) native 本地方法。可以调用本地代码,比如调用C代码。
成员权限 public > protected > (default) > private default 同包类 protected 同包+子类
接口里的方法默认为: public abstract
构造方法:(仅能初始化非静态属性,静态方法不能操作非静态属性,反之可以) 方法名=类名 一般不是public访问权限 不能有任何修饰 无返回值类型 如果不提供构造方法,则系统提供一个无参的构造方法。但是存在任何自己写的构造方法,缺省的构造方法立即失效。 类继承的时候,不继承构造方法。 初始化父类super()。 如果父类是抽象基类,就不用加了。
super() this()
接口定义 [权限] interface 接口名 [extends 接口列表] { 接口体; } 可以继承多个接口。称为接口的拼装 接口一般声明为public 接口作为引用类型来使用。通过这些变量,可以访问所有实现该接口的方法。
练习: 1.mod02/exercise3 类的公有方法被称为类的接口。 写一个Account类 放在包banking中 并用TestBanking测试
2.在banking中添加类Customer. 3.修改TestBanking。用Customer操作Account。
2005-2-23 8:00 1. 需求分析(top n |