一,基本概念
JVM
Java Virtual Machine,java 虚拟机,是一个虚拟计算机,可以解释并运行 Java 字节码。
JRE
Java Runtime Environment(Java 运行环境),运行 JAVA 程序所必须的环境的集合,
包含 JVM 标准实现及 Java 核心类库。
J2SE
Java 2 Standard Edition(JAVA2 标准版),用来 开发 Java 程序的基础,包括编译器、
小工具、运行环境,SUN 发布的标准版本中还 包括核心类库的所有源代码。
J2SE
java2 enterprise edition 是 Java2 的企业版,主要用于分布式的网络程序的开发,如电子
商务网站和 ERP 系统.
J2ME
Java 2 Micro Edition 是 Java 的微型版,主要应用于嵌入式系统开发,如手机和 PDA 的
编程.
JDK
Java Development Kit(Java 开发工具包):包括运行环境 、编译工具及其它工具、源代
码等,基本上和 J2SE 等同。
Upcasting
上溯造型,子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象
转为父类对象。此处父类对象可以是接口
Downward Cast
向下转型,父类引用的对象转换为子类类型称为向下转型。
Encapsulation
封装,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的
访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是
将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
(OOP 将数据(属性)和方法(行为)封装在一个对象(Object)中,对象与数据和方法紧密
的绑在一起。从外部看类,仅仅知道有一些接口,但不知道接口如何操作的。优点:隐
藏细节。)
Inheritance
继承,先定义一个包含公用方法和公用变量的类作为父类,在此基础上建立具有专用方
法和专用变量的类作为子类,方便编程。
Polymorphism
多态是同一个行为具有多个不同表现形式或形态的能力。
Singleton
单例设计模式,通过定义私有的构造函数(private constructor),使从单例类的外部无法
初始化该类,从而确保该类只有一个实例。
Serializable
序列化,一种保存对象状态的机制,对象通过写出描述自己状态的数值来记录自己 ,
这个过程叫对象的序列化。(只有对象的数据被序列化,用 transient 修饰的对象不会被
序列化,序列化被用来将一个对象的状态存储到一个文件中)
ActionListener(P241)
动作事件监听器,java 使用委托机制,在 GUI 编程中,Event 会将事件委托给特定对象。
EventListener--
Interface
接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法
的实现。使用关键字 interface 定义,接口中定义的变量都是 final static,接口没有构造
方法,并且定义的成员方法都是抽象方法,采用多重继承机制。
Statement
是一个接口,该接口用于执行静态 SQL 语句并返回它所生成结果的对象。
executeUpdate()方法,一般用于执行 SQL 的 INSERT,DELETE,UPDATE 语句
executeQuery()方法,一般用于执行 SQL 的 SELECT 语句,因为 它的返回值是执行 SQL
语句后产生的一个 ResultSet 接口的实例(结果集)
execute()方法,即一般它执行的 SQL 语句既有查询又有更新值,约等于 executeUpdate()和
executeQuery()两个方法的合辑
PerparedStatemen--表示预编译的 SQL 语句的对象,用于执行带 IN 参数和不带 IN 参数的
预编译 SQL 语句,建立该对象的方法为 PerpareStatement。
ResultSet 接口:包含了 Statement 和 PreparedStatement 的 executeQuery 方法中 SELECT 的
结果集。相当于用它来读取数据库里每列的值。
CallableStatement--用于执行对数据库存储过程的调用,是 Statement 的子接口。
Runnable-- Runnable 接口只提供一个抽象方法 run(),在声明类的时候添加该接口,可以实
现多线程。
commit--提交事务,会将磁盘缓存中的数据写入磁盘的数据库中,一般数据库是自动提交,
因此修改以后数据库就会发生变化。
rollback--数据回滚,将事务中已经执行成功的部分回到最初的状态。
GUI--图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图
形方式显示的计算机操作用户界面。
final--
1. 修饰类当用 final 去修饰一个类的时候,表示这个类不能被继承。注意:a. 被
final 修饰的类,final 类中的成员变量可以根据自己的实际需要设计为
fianl。b. final 类中的成员方法都会被隐式的指定为 final 方法。
2.修饰方法。被 final 修饰的方法不能被重写。注意:
a. 一个类的 private 方法会隐式的被指定为 final 方法。
b. 如果父类中有 final 修饰的方法,那么子类不能去重写.
3. 修饰成员变量。成员变量必须初始化且不能改变(常量)。被 fianl 修饰的成员变量赋值,
有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
a. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
b. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个
引用所指向的对象里面的内容还是可以改变的。
Vector--失量队列,支持相关的添加、删除、修改、遍历等功能,支持随机访问、克隆、序
列化。
JDBC--(Java Data Base Connectivity, java 数据库连接)是一种用于执行 SQL 语句的 Java API,
可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC 提
供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用
程序,同时,JDBC 也是个商标名。JAVA 可以通过他对数据库进行增删改查操作。
abstract--抽象。如果修饰类,表示此类为抽象类;此类不能生成对象,需被继承使用;
如果修饰方法,表示此方法为抽象方法,可以只声明不实现,其实现由继承类实现
Overload--方法的重载,通常在一个类中发生,如果在一个类中定义了多个同名的方法,它
们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载
(Overloading)。
Override--方法的覆盖(重写),是父类和子类之间多态性的一种表现,子类中定义某方法与
其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。子类的对象使用这个方法
时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。
Wrapper class--包装类,把基本数据类型升级为引用数据类型的类,使基本数据类型拥有方
法和属性。
Delegation--委托,一个对象请求另一个对象的功能,捕获一个操作并将其发送到另一个对
象,为了提高代码的复用性。
Layout Manager--版面配置管理器,把 container 中的元件做适当的配置。
Swing--用于开发 Java 应用程序用户界面的开发工具包,以抽象窗口工具包(AWT)为基础
使跨平台应用程序可以使用任何可插拔的外观风格。
AWT—Abstract Window ToolKit,是 java 图形界面的工具箱。
Decorator--装饰者模式,指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个
对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。(是一种设计模
式,允许一个对象套在另一个对象外面 ,I/O 流)
URL--统一资源定位符,答案有。
OOP--面向对象程序设计(Object Oriented Programming),答案有。
instanceof--用来在运行时指出对象是否是特定类的一个实例。instanceof 通过返回一个布尔
值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
Exception—异常,异常类定义了程序遇见的轻微错误,例如打开的文件不存在,网路连接
中断等。
Buffer--缓冲区是一块特定的内存区域,其目的是通过缓解应用程序上下层之间的性能差异,
减少上层对下层的等待时间,以此提高系统性能。
Flush—冲走,把缓冲区的内容强制的写出。
SDK—软件开发工具包(Software Development Kit)辅助开发某一类软件的相关文档、范例
和工具的集合都可以叫做“SDK”。SDK 是一系列文件的组合,它为软件的开发提供一个平
台(它为软件开发使用各种 API 提供便利)。
API-- application programming interface,应用程序编程接口,java api 是指 java 标准类库提
供的函数。Sdk 调用 API。
Privat--修饰的成员变量和函数只能在类本身和内部类中被访问。
Protected--修饰的成员变量和函数能被类本身、子类及同一个包中的类访问。
Public--修饰的成员变量和函数可以被类、子类、同一个包中的类以及任意其他类访问。
默认情况(不写)下,属于一种包访问,即能被类本身以及同一个包中的类访问。
Static—P15(第一本)
Transient—被 transient 关键字修饰的数据无法被序列化。
Synchronized--
synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的
代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是
调用这个方法的对象;
3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修饰一个类,其作用的范围是 synchronized 后面括号括起来的部分,作用主的对象是这
个类的所有对象。
一个线程访问一个对象中的 synchronized(this)同步代码块时,其他试图访问该对象的线程将
被阻塞
Wait()和 notify()--wait()的作用是让当前线程进入等待(阻塞)状态,同时,wait()也会让当前
线程释放它所持有的锁。而 notify()和 notifyAll()的作用,则是唤醒当前对象上的等待线程;
notify()是唤醒单个线程,而 notifyAll()是唤醒所有的线程。
异常中的关键字----------
try 块表示程序正常的业务执行代码。如果程序在执行 try 块的代码时出现了“非预期”情
况,JVM 将会生成一个异常对象,这个异常对象将会被后面相应的 catch 块捕获。(其中是
可能产生异常的代码,发现异常关系)
catch 块表示一个异常捕获块。当程序执行 try 块引发异常时,这个异常对象将会被后面相
应的 catch 块捕获。
throw 用于手动地抛出异常对象。throw 后面需要一个异常对象。
throws 用于在方法签名中声明抛出一个或多个异常类,throws 关键字后可以紧跟一个或多
个异常类。
finally 块代表异常处理流程中总会执行的代码块。
重写 Value 方法:
class Value{
int i;
boolean equals(Value n)
{
}
if(this.i==n.i)return true;
else return false;
}
public class Equals2
{
}
public static void main(String[] args)
{
}
Value n1=new Value();
Value n2=new Value();
n1.i=100;
n2.i=100;
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
因为原 equals()方法直接继承自 Object 类,比较的是地址的值,而 n1 和 n2 是两个不同的对
象,地址不同,因此输出 false。
为什么内部类中不能引用局部变量?
内部类的生命周期和方法中的局部变量是不一样的,内部类是也是一个类,是存储在堆
中,也只有当对该类的引用消失时,内部类才会消亡,而方法的局部变量是存储在栈内存中
的,当调用结束时就会弹栈,就是在内存中这个属性就消失了。
内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的
局部变量,因此内部类不能直接访问方法中的局部变量。
解决方法:局部变量前加修饰符 final,此时局部变量就会存在堆中,生命周期和内部类
的生命周期是一样的,此时内部类就可以访问方法中的局部变量。
给出 5 个使用 java 进行数据库编程时常用的类及其功能,并写出一
段简短的数据库操作例程(JDBC 课件 P10)
DriverManager 类处理驱动程序的加载和建立新数据库连接。
Connection 类是 java.sql 包中用于处理与特定数据库连接的类。Connection 对象是用来
表示数据库连接的对象,Java 程序对数据库的操作都在这种对象上进行。
Statement 类是 java.sql 包中用于在指定的连接中处理 SQL 语句的类。
ResultSet 类,有了 SQL 语句对象后,调用语句对象的方法 executeQuery()执行 SQL 查
询,并将查询结果存放在一个用 ResultSet 类声明的对象中,
SQLException Class
PreparedStatement 类, 作用:带有预编译的功能:效率高:防止 sql 注入:
首先,创建 Employee 表。
creat table Employee(
id int primary key,
name varchar(20),
age int
);
示例程序
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
public class Test {
static final String DB_URL = "jdbc:mysql://localhost:3306/databaseweb";
// MySQL 的 JDBC URL 编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称
static final String USER = "root";
static final String PASS = "123";
public static void main(String[] args) throws SQLException,Exception{
Connection conn = null;
Statement stat = null;
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建链接
conn = (Connection) DriverManager.getConnection(DB_URL,USER,PASS);
// 执行查询
stat = conn.createStatement();
String sql = "SELECT * FROM tb_person";
ResultSet rs = stat.executeQuery(sql);