Java相关课程系列笔记之十四Hibernate学习笔记(建议用WPS打开)

Java相关课程系列笔记之十四Hibernate学习笔记(建议用WPS打开)
Java相关课程系列笔记之十四Hibernate学习笔记(建议用WPS打开)

Hibernate学习笔记

Java相关课程系列笔记之十四

笔记内容说明

Hibernate(梁建全老师主讲,占笔记内容100%);

目录

一、 Hibernate的概述 0

Hibernate框架的作用 0

Hibernate访问数据库的优点 0

JDBC访问数据库的缺点 0

Hibernate的设计思想 0

二、 Hibernate的基本使用 (1)

Hibernate的主要结构 (1)

Hibernate主要的API (1)

Hibernate使用步骤 (1)

HQL语句(简要介绍) (3)

三、数据映射类型 (3)

映射类型的作用 (3)

type映射类型的两种写法 (3)

四、 Hibernate主键生成方式 (3)

五种生成方式 (3)

五、 Hibernate基本特性 (4)

对象持久性 (4)

处于持久状态的对象具有的特点 (4)

三种状态下的对象的转换 (4)

批量操作:注意及时清除缓存 (4)

案例:三种状态下的对象使用 (4)

一级缓存机制(默认开启) (4)

一级缓存的好处 (4)

管理一级缓存的方法 (4)

延迟加载机制 (4)

具有延迟加载机制的操作 (4)

常犯的错误 (4)

延迟加载的原理 (4)

Session的get和load方法的区别 (4)

延迟加载的好处 (5)

案例:测试延迟加载 (5)

案例:重构NetCTOSS资费管理模块 (5)

Java Web程序中如何用延迟加载操作(OpenSessionInView) (5)

六、关联映射 (5)

一对多关系one-to-many (5)

多对一关系many-to-one (5)

多对多关联映射many-to-many (5)

关联操作(查询join fetch/级联cascade) (5)

继承关系映射 (5)

七、 Hibernate查询方法 (6)

HQL查询 (6)

HQL和SQL的相同点 (6)

HQL和SQL的不同点 (6)

HQL典型案例 (6)

Criteria查询 (6)

Native SQL原生SQL查询 (7)

八、 Hibernate高级特性 (7)

二级缓存 (7)

二级缓存开启方法及测试 (7)

二级缓存管理方法 (7)

二级缓存的使用环境 (7)

查询缓存 (7)

查询缓存开启方法及测试 (7)

查询缓存的使用环境 (7)

九、 Hibernate锁机制 (7)

悲观锁 (7)

悲观锁的实现原理 (7)

悲观锁使用步骤及测试 (7)

乐观锁 (7)

乐观锁的实现原理 (7)

乐观锁使用步骤及测试 (7)

十、其他注意事项 (7)

源码服务器管理工具 (7)

利用MyEclipse根据数据表自动生成实体类、 (7)

根据实体类和生成数据表 (7)

Hibernate中分页查询使用join fatch的缺点 (7)

Hibernate的子查询映射 (8)

一、Hibernate的概述

Hibernate框架的作用

Hibernate框架是一个数据访问框架(也叫持久层框架,可将实体对象变成持久对象,详见第5章)。通过Hibernate框架可以对数据库进行增删改查操作,为业务层构建一个持久层。可以使用它替代以前的JDBC访问数据。

Hibernate访问数据库的优点

1)简单,可以简化数据库操作代码。

2)Hibernate可以自动生成SQL,可以将ResultSet中的记录和实体类自动的映射(转化)。

3)Hibernate不和数据库关联,是一种通用的数据库框架(支持30多种数据库),可以方便数据库移植。任何数据库都可以执行它的API。因为Hibernate的API中是不涉及SQL 语句的,它会根据Hibernate的配置文件,自动生成相应数据库的SQL语句。

JDBC访问数据库的缺点

1)需要编写大量的复杂的SQL语句、表字段多时SQL也繁琐、设置各个问号值。

2)需要编写实体对象和记录之间的代码,较为繁琐。

3)数据库移植时需要修改大量的SQL语句。

Hibernate的设计思想

Hibernate是基于ORM(Object Relation Mapping)思想设计的,称为对象关系映射。负责Java对象和数据库表数据之间的映射。

Hibernate是一款主流的ORM工具,还有其他很多ORM工具,如:MyBatis(以前叫iBatis)、JPA。Hibernate功能比MyBatis强大些,属于全自动类型,MyBatis属于半自动。但全自动会有些不可控因素,因此有些公司会用MyBatis。

ORM工具在完成Java对象和数据库之间的映射后:

1)在查询时,直接利用工具取出“对象”(不论是查询一条记录还是多条记录,取出的都是一个个对象,我们不用再去转化实体了)。

2)在增删改操作时,直接利用工具将“对象”更新到数据库表中(我们不用再去把对象转成数据了)。

3)中间的SQL+JDBC细节,都被封装在了工具底层,不需要程序员参与。

注意事项:

Java程序想访问数据库,只能通过JDBC的方式,而Hibernate框架也就是基

于ORM思想对JDBC的封装。

Hibernate是以“对象”为单位进行数据库的操作。

二、Hibernate的基本使用

Hibernate的主要结构

1)(仅1个):Hibernate的主配置文件,主要定义数据连接参数和框架设置参数。

注意事项:就是个xml文件,只是名字比较奇葩!

2)Entity实体类(n个,一个表一个):主要用于封装数据库数据。

3)映射文件(n个):主要描述实体类和数据表之间的映射信息。描述表与类,字段与属性的对应关系。

注意事项:是个后缀,如:命名可写。

Hibernate主要的API

1)Configuration:用于加载配置信息。用于创建SessionFactory。

2)SessionFactory:存储了中描述的信息,内置了一些预编译的SQL,可以创建Session 对象。

3)Session:负责对数据表执行增删改查操作。表示Java程序与数据库的一次连接会话,是对以前的Connection对象的封装。和JSP中的session不是一回事,就是名字一样而已。

4)Query:负责对数据表执行特殊查询操作。

5)Transaction:负责Hibernate操作的事务管理。默认情况下Hibernate事务关闭了自动提交功能,需要显式的追加事务管理(如调用Transaction对象中的commit();提交事务)!

注意事项:

这些API都是在Hibernate包下的,导包别导错!

第一次访问数据库比较慢,比较耗资源,因为加载的信息多。

Hibernate使用步骤

step1:建立数据库表。

step2:建立Java工程(Web工程也可),引入Hibernate开发包和数据库驱动包。必须引入的包:、、、、…等

step3:添加配置文件,文件内容如下:

"-

名,指定是哪个类;table:数据库中哪个表;catalog:对Oracle而言为哪个数据库,对MySQl而言为某个用户(MySQl是在用户下建表,Oracle是在库中建表),

不写也行(若用工具则会自动生成)。例如,select * from cost_chang则会在配置文件中定义的库(或用户)下去找表。若写了则为select * from -->

COST_SEQ_CHANG

…………其他省略…………

注意事项:

映射文件默认与POJO类放在一起;命名规则为:类名.。

中已写出的属性与字段的映射要一一对应,若表中没有某个字段,却写了映射

关系,则报错:找不到实体类。

step6:利用Hibernate API实现DAO

1)新建HibernateUtil类,用于封装创建Session的方法。如下:每个用户会对应一个Session,但是SessionFactory是共享的。

public class HibernateUtil {

private static SessionFactory sf;

static{

.语句获取当前主键的最大值,执行加1操作,然后再调用insert语句插入。Oracle和MySQL都可用。但不适合并发量很大的情况!

例如:

6)uuid/hilo:uuid:按UUID算法生成一个主键值(字符串类型);hilo:按高低位算法生成一个主键值(数值类型)。

例如:

注意事项:

主键一般都是自动生成的。我们一般不使用业务数据作为主键,因为业务逻辑

的改变有可能会改变主键值。

主键生成方式是枚举类型,只能从一个有限的范围内选择,不能自定义。其中,

sequence是使用序列生成主键(Oracle数据库经常使用)。

三、Hibernate基本特性

对象持久性

在Hibernate使用过程中,实体对象可以具有以下三种状态:

1)临时状态:采用new关键字创建的对象,该对象未与Session发生关联(未调用Session的API)。也叫临时对象。临时状态的对象会被Java的垃圾回收机制回收。

2)持久状态:实体对象与Session发生关联(调用了Session的get、load、save、update 等API)。也叫持久对象。

3)游离状态:原来是持久状态,后来脱离了Session的管理。如:Session被关闭,对象将从持久状态变为游离状态,同时垃圾回收机制可以回收掉,不再占用缓存空间了。

处于持久状态的对象具有的特点

1)对象生命期持久,垃圾回收机制不能回收。

2)对象的数据可以与数据库同步(即对象中的数据发生改变,则数据库中的数据自动同步)。由Session对象负责管理和同步。

3)对象在Session的一级缓存中存放(或者说在Session缓存中的对象都是持久对象)。

注意事项:();有两个作用:①关闭连接、释放资源②使对象变为游离状态,当对象

的引用不存在时,对象才被回收。没被回收时,对象中的数据还在!

三种状态下的对象的转换

批量操作:注意及时清除缓存

Transaction tx = ();

for(int i=0;i<100000;i++){ Foo foo = new Foo();

(foo);ava --> *.class --> 载入类加载器 --> 执行

延迟加载:(生成新类型)--> 类加载器 --> 执行

Session的get和load方法的区别

1)相同点:两者都是按“主键”做条件查询。

2)不同点:①get是立刻加载;load是延迟加载。

②get返回的对象类型是实体类型;load返回的是动态生成的一个代理类(动态

代理技术),该代理类是实体类的子类。

③get未查到数据返回null;load未查到数据抛出ObjectNotFoundException异常。

注意事项:若实体类用了final修饰,则破坏了延迟加载机制,那么load效果与get就完全相同了。

延迟加载的好处

1)提高了内存的使用效率。2)可以使数据访问降低并发量。

案例:测试延迟加载

@Test

public void test1(){ Session session=();

ction-->Action-->DAO(延迟API)-->JSP(利用标签或EL获取数据,会触发延迟加载数据)-->生成响应HTML页面给浏览器。

2)基于上述原因,在DAO中不能关闭Session,需要将Session关闭放到JSP解析之后(把Session的关闭延迟到View组件运行完之后),这种模式被称为OpenSessionInView。

3)OpenSessionInView和ThreadLocal:

使用OpenSessionInView必须满足Session的线程单例,一个线程分配一个Session,在该线程的方法中可以获得该Session,具体使用ThreadLocal(一个线程为key 的Map)。

Hibernate支持的Session线程单例,配置文件中:

thread

然后调用:();dd(role1); ().add(role2);emove(role1);dd(role1);dd(service1);

().add(service2);

Session session=(); Transaction tx=();

.

注意事项:遇到一对多、多对一关系映射时,把inverse="true"属性加到

one-to-many一方(One方放弃,Many方维护)。能起到一定的优化作用。

4)级联删除

在TestCascade类中添加方法:

@Test

public void testDelete(){

/** Account account=new Account(); (id); 级联删除,不要采用new Account()方法,因为new出来的account,它的services是空的,那么将是单表操作,将报错:违反完整性约束 */

Session session=(); Transaction tx=();

Account account=(Account), 500);.}、public class Car extends Product{ ...} step3:添加映射文件:、、

PRODUCT_SEQ

……其他部分略

描述了Book与Product的描述信息 -->

extends="">

……其他部分略

描述了Book与Product的描述信息 -->

extends="">

……其他部分略

step4:创建TestExtends类,用于测试继承关系映射

@Test

public void testAddBook(){ Session session=();

Transaction tx=(); Book book=new Book();

1) ("常的书");.and、is null、is not null、like、or等过滤条件。

2)都支持分组统计函数count、max、min、avg、sum。

HQL和SQL的不同点

1)HQL区分大小写(除了关键字外)。

2)HQL使用类名和属性名,不能使用表名和字段名。

3)HQL不能使用select * 写法。

4)HQL不能使用join...on中的on子句。

5)HQL不能使用数据库端的函数。

注意事项:HQL中select count(*)可以使用。

HQL典型案例

1)案例1:一个主键的情况

step1:借用之前的Account实体、、:新建TestHQL类,用于测试HQL。查询操作可不写事务控制语句。

@Test 点出来,若属性是集合、数组,则它们里面没有其他属性,不能“.”出来 */ hql +="select ,,, ";

hql +="from Service s";

lass); List list=();

注意事项:分组、太复杂的语句用不了。

2)案例:创建TestCriteria类,用于测试Criteria查询(借助以前的实体和映射)@Test

public void

test1(){

.

第一个界面选择生成和POJO(实体类),及其存放路径,然后点Next;

第二个界面选择Type Mapping为Hibernat types(其他设置可默认),然后点Next;

第三个界面选择数据表,可以设定映射的POJO类名(包名.类名)和主键生成方式,选择字段可以设置属性名和映射类型(要改,否则不符合Java命名规范),最后点击Finish。

注意事项:第一个界面有个Create abstract class,创建抽象类。意思为:public class Foo extends AbstractFoo implements

.

第四个界面,改名为HibernateUtil

第一个界面:用以前的实体类方式,所

以不选择Create abstract class

第三个界面:类名为:包名.类

第三个界面:每个字段建议都去改名字,

否则生成的属性名不符合Java命名规范

(select ... rownum<) where rownum>

那么假分页的结果就是,一次性把数据全部取出来放在缓存中,比较适合小数据量,如果数据量大,对内存压力比较大。

所以,建议join fatch语句不要和分页查询一起用!

“假分页”详情可看JDBC笔记节。

Hibernate的子查询映射

1)在映射文件中使用如下格式:

在对当前对象查询时,Hibernate会将子查询执行结果给指定的属性赋值。

2)formula使用注意事项:

①必须将子查询语句用括号括起来。

②子查询语句必须是SQL语句。

③子查询中使用的表必须用别名(在查询条件中没有别名的字段都默认是当前映射实体类的字段)。

④当使用了子查询映射后,如HQL语句:from Host,默认查询所有字段和子查询结果。如果只需要部分字段值,不需要子查询结果,可以采用select单独指定需要的字段属性。

3)案例:对于NetCTOSS项目中的每台服务器资费使用量的查询

step1:在实体类Host中添加三个属性,并设置set/get方法

!

java基础知识点总结

Created by AIwen on 2017/5/14. java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。 实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。 java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。 返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。 static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而

课程设计—java记事本

import javax.swing.*; import javax.swing.undo.*; import javax.swing.text.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.awt.datatransfer.*; import java.awt.print.*; import java.io.*; public class Jishiben extends JFrame implements ActionListener { JPopupMenu pm ; JTextArea ta; boolean isNewFile=true; //是否新文件(未保存过的) File currentFile; //当前文件名 String oldValue; //存放编辑区原来的内容,用于比较文本是否有改动//protected UndoManager undo = new UndoManager(); //protected UndoableEditListener undoHandler = new UndoHandler(); JToolBar tbar = new JToolBar(); JCheckBoxMenuItem mt19; public Jishiben() { super("记事本"); //Container ct=getContentPane(); //以下三句是设置编辑区域及滚动条 ta = new JTextArea(); JScrollPane sp = new JScrollPane(ta); add(sp); JMenuBar mb = new JMenuBar(); //设置文件菜单 JMenu mu1 = new JMenu("文件(F)",true); mu1.setMnemonic('F');//设置快捷键按下ALT+F激活打开菜单 JMenuItem mt1 = new JMenuItem("新建(N)",'N'); mt1.setMnemonic('N'); //mt1.addActionListener(new new1()); JMenuItem mt2 = new JMenuItem("打开(O)...",'O'); mt2.setMnemonic('O'); mt2.addActionListener(this); JMenuItem mt3 = new JMenuItem("保存(S)",'S'); //mt3.addActionListener(new save()); mu1.add(mt3); JMenuItem mt4 = new JMenuItem("另存为(A)..."); JMenuItem mt5 = new JMenuItem("页面设置(A)..."); JMenuItem mt6 = new JMenuItem("打印(P)..."); JMenuItem mt7 = new JMenuItem("退出(X)",'X');

java基础知识

一.set,list 区别 List和Set都是接口。他们各自有自己的实现类, 有无顺序的实现类,也有有顺序的实现类。 最大的不同就是List是可以重复的。而Set是不能重复的。 List适合经常追加数据,插入,删除数据。但随即取数效率比较低。 Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。 二.ArrayList与LinkedList区别。 List: 有顺序的,元素可以重复 遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低轻量级线程不安全 遍历: ArrayList al=new ArrayList(); al.add("winsun"); al.add("weixin"); al.add("mybole"); for(int i=0;i

Java基础学习心得笔记

Java基础学习心得笔记 对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变。面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做的事情抽象成对象,告诉对象去做。所以要想学好java入门,必须知道类和对象的概念。 类是对生活中事物的抽象描述,比如人类,动物类,交通工具类;对象即是对类的具体实例化,比如张三是人,猫是动物,飞机是交通工具(对象-----类)。Java基础入门学习路线可以总结为四步走: 1.java开发环境的搭建; 2.java初级之基础语法学习(80%类似C语言); 3.java中级之面向对象编程学习(重点); 4.java中级之应用编程学习。 第一步:JDK软件开发包时java软件开发环境, 包括jre运行环境和jvm虚拟机,在oricle官网下载javaSE版本JDK包;配置好环境变量就可以使用了。 第二步:java初级语法学习, 1.基本数据类型整形,字符型,字节型,长整形,短整形,浮点型,双精度,布尔型;

2.运算符+,-,*,/,%等; 3.控制流(while,switch,if else); 4.数组的定义方式。 此阶段基本无难度,只要了解练习例题。 第三步:java面向对象学习, 1.类和对象; 2.java语言三大特性,封装、继承、多态; 3.一些关键字学习(static,final,abstract,extends)等。 这是重点,大家根据知识点一步步研究学习才是关键。 第四步:java应用编程, 例如:文件IO,集合(类似C语言数据结构),异常处理,线程,网络,JDBC数据库操作等,都是掌握面向对象以后,在查找不同的类使用类中不同的方法达到应用的效果,所以并不会很难。等基础语法掌握了就可以继续后面框架学习(java web方向,android学习),相信明确思路你会豁然开朗,更有学习动力。 以上没有具体的实例和知识点讲解,分享的只是完全没接触过java的初学者自学java的思路和学习的流程,应该把握的重点,希望大家有所帮助。 如果你想学好Java,找一家靠谱的培训机构,能让你的学习事半功倍。

java课程设计策画日历记事本

课程设计说明书 课程: Java程序设计 院系:计算机科学学院 专业班级:计算机科学与技术(2)班 组员:张少华、张天阳 2010年6月 26 日

《Java程序设计》课程设计 ——日历记事本 我们开发了一个实现有日历标记的记事本软件,日历记事本面板由日历和和记事本两部分组成。日历部分可以调节年份,月份,日期,星期。记事本可以实行查看,保存,删除等操作,并且每一步操作都有相应提示。本软件是一个实用性很强,简洁,方便的功能软件。 引言 Java是一种纯面向对象的、网络编程首选的语言。Java技术作为软件开的一种革命性技术,已被列为当今世界信息技术的主流之一。为了适应时代潮流,我们应该加强对Java的学习,更好的掌握这门课程。为此,我们成了一个课程小组,经过小组成的商讨之后,我们决定以“日历记事本”为设题材,借此巩固加深我们对Java 的了解。 本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但在此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数抽象能力。因此,我们觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。 1、设计的目的与要求; (1)为用户提供一个简便的日历记事本; (2)对java技术的进一步了解和简单的运用; (3)初步的接触软件工程; 2.设计目的与任务 本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现“日历记事本”的“日历”和“记事本”的双重功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。 3.设计方案 3.1 总体设计

Java中集合类用法总结

帮助 | 留言交? | 登录 首页我的图书馆主题阅读精彩目录精品文苑Tags 会员浏览好书推荐 以文找文 如何对文章标记,添加批注? Java 中集合?用法总结(转载) wade0564 收录于2010-07-08 阅读数:查看 收藏数:7 公众公开 原文来源 tags : java 集合类 欢迎浏览 wade0564 个人图书馆中收藏的文章,想收藏这篇好文章吗,赶快 吧,1分钟拥有自己的个人图书馆! 我也要收藏 举报 Java 中集合?用法总结 收藏 Collection ├List │├LinkedList │├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同 步,线程安全,空间用完时自动增长原容量一倍)│ └Stack └Set ├HashSet └TreeSet Map ├Hashtable ├HashMap ├WeakHashMap └TreeMap Map 接口: | + -- WeakHashMap: 以弱键 实现的基于哈希表的 Map 。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条 | 目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为 可终止的,被终 | 止,然后被回收。丢弃某个键时, 其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。此实现 | 不是同步的。 | + -- TreeMap:该映射根据其键的自然顺序进行 排序,或?根据创建映射时提供的 Comparator 进行 排序,具体取决于使用的 | 构造方法。此实现不是同步的。 | + -- HashMap:基于哈希表的 Map 接?的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了 | 非同步和允许 使用 null 之外,HashMap 类与 Hashtable ?致相同。)此类不保证映射的顺序,特别是它不保证该顺 | 序恒久不变。此实现不是同步的。 | +-- SortedMap: 进一步提供关于键的总体排序 的 Map 。该映射是根据其键的自然顺序进 行排序的,或?根据通常在创建有 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet 、keySet 和 values 方法返回 )进行迭代时,此顺序就会反映 出来。要采用此排序方式,还需要提供一些其他操作(此接?是 SortedSet 的对应映 射)。 Collection 接口: | 热点推荐 中国经典汤品——广东汤常用多音字汇总 如果你失恋。。。这些话...影响世界的100个管理定律汽车发动机?作过程和原理分析温家宝总理答中外记?问女人味,有多少男人可以读懂?珍稀的白头叶猴(组图)三鹿门事件之——中国,...国家公务员职务与级别当代古筝四美 付娜《渔...生活?秘方 真的很实用...哲理?品:守护梦想聚会时可以玩的?游戏依赖型人格障碍的表现和治疗经典妙语,十分精彩江边施救[贴图]李一男2003年在港湾...电脑速度慢的解决方法 ...重装系统后必须做的10件?事

黑马毕向东JAVA基础总结笔记

Java基础知识总结(超级经典) 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。demo 4,该技术什么时候用?test。 ----------------------------------------------------------------------------------------------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础; JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\ 2):临时配置方式:set classpath=.;c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件; 如果指定了classpath,那么会在指定的目录下查找要运行的类文件。 还会在当前目录找吗?两种情况: 1):如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。 2):如果classpath的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。 一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。 4,javac命令和java命令做什么事情呢? 要知道java是分两部分的:一个是编译,一个是运行。 javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java 文件进行编译。生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。 java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行. 一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数. ----------------------------------------------------------------------------------------------

仿windows JAVA 课程设计 记事本

前言 随时着科学技术的快速发展,计算机程序设计早已成为了趋势,JAVA是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。JAVA是实践性很强的课程。课程设计是加强实践能力的一个强有力手段。要求掌握JAVA的应用、编写、上机调试的基本方法。本课程设计就是主要利用java语言编写的一个模仿windows 记事本的较简单的程序,实现了一些基本功能,要求打开文件,读取文件中的文本信息;显示、编辑修改文本信息;实现输入文本文件、控制保存文本信息到指定的文件的功能。 目录 一、需求分析 (1) 二、概要设计 (1) 三、详细设计 (2) 四、系统调试分析 (6) 五、课程设计心得体会 (7) 六、使用说明 (7) 七、参考文献及致 (7) 八、附录(程序源代码) (7)

一、需求分析 该课程设计报告里的简易记事本程序是使用Java程序设计语言编写的,要现记事本的基本功能,参考了windows中记事本的一些功能。要求打开文件,读取文件中的文本信息;显示、编辑修改文本信息;实现新建、打开、保存文本文件以及控制保存文本信息到指定的文件的一些基本功能。 二、概要设计 1.1 系统主要功能 本程序是利用java程序设计语言编写的一个简单的记事本程序。可以通过菜单栏和工具栏实现以下功能:如文件的新建,打开,保存和退出;对文件的编辑,如复制,剪切,粘贴;以及帮助菜单;执行完操作后,能够顺利关闭记事本。 1.2运行环境要求 (1) 实现设计的系统硬件需求 硬件配置的基本要求: * 586以上的计算机 * 32MB以上的存 * 彩色显示器 * 3.5寸高密软盘驱动器 * 光盘驱动器 * 4G以上硬盘空间 * 鼠标 (2) 实现设计的系统软件 * WINDOWS95或WINDOWS98 * Jcreator Pro全套软件 三、详细设计 设计思路:设计一个EditorDemo类,继承自JFrame类,并在EditorDemo类利用JtextPane 创建面板窗口textPane,利用Jlabel创建状态栏 statusBar,利用JFileChooser 创建文件选择器filechooser,利用JMenuBar创建并实例化菜单栏,利用JToolBar创建工具栏,再通过一些具体方法实现各功能键的功能。建立构造函数public EditorDemo();通过该构造函数实现记事本程序的主要功能,运行时在主类过调用该构造函数来实现对记事本程序的基本操作。 1:窗口设计 在主接口中设计一个EditorDemo容器继承自JFrame,并在其中加入菜单栏、工具栏和一个文本域控件。

java基础笔记

1什么是变量? 答:是指代在内存中开辟的储存空间,用于存放运算过程中需要用到的数据。 一个类中不能有2个public以为有pulic要和类名保持一致,有2个的话就不知道是和谁保持一致了,可以用很多类。 2变量的声明 答:当需要使用一个变量的时候,必须要对该变量就行声明,变量的声明包含2点,1是变量的基本数 据类型,2是变量名比如int a ;int是数据类型a是变量名,可以声明多个变量,比如int a,b,c;等 3,变量的初始化 答:有2种初始化方法, 1是在变量声明时初始化,变量类型变量名=初始值,比如int a=0; 2是先声明变量,然后再初始化给变量赋值,,比如int a;a=0; 3.1可以对变量中的值进行存取,操作,变量使用之前,要使用与其变量符合的数据类型。 3.2基本数据类型,8种 1整数类行:byte,short int(常用),long(常用)2浮点类型:float,double(常用)3,boolean 4 char 类型名称字节空间使用场景 ------------------------------------------------------------------------------------------------------------ byte 丨1字节(8位)丨储存字节数据(较少用) --------------------------------------------------------------------------------------------------------------- short 丨2字节(16位)丨兼容性考虑(很少用) ------------------------------------------------------------------------------------------------------------ int 丨4字节(32位)丨存储普通整数(常用) -------------------------------------------------------------------------------------------------------------- long 丨8字节(64位)丨存储长整数(常用) ------------------------------------------------------------------------------------------------------------- float 丨4字节(32位)丨存储浮动数(不常用) ------------------------------------------------------------------------------------------------------------ double 丨8字节(64位)丨存储双精浮点数(常用) ----------------------------------------------------------------------------------------------------------- boolean 丨1字节(8位)丨存储逻辑变量(true,fales)(常用) --------------------------------------------------------------------------------------------------------------- char 丨2字节(16位)丨存储一个字符(常用) ---------------------------------------------------------------------------------------------------------------

java课程设计简单记事本开发内附完整代码流程图等

浙江科技学院 经济管理学院 JAVA语言课程设计报告 选题名称简单记事本开发 学生学号 专业班级 学生姓名 学生成绩 指导教师朱军 工作时间2012/06/27——2012/06/29

目录 第一章选题简介 主要利用面向对象的程序设计语言Java来实现简单记事本,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,查找,替换等功能,区别于一般的记事本,本程序利用了Java swing和事件监听等能够对文字的颜色进行设置。 第二章需求分析 1.系统要实现的目标分析 菜单中有文件,编辑,格式,视图风格,帮助五个主菜单。 (1)“文件”有新建、打开、保存、另存为、退出五个子菜单:分别用于新建文件,打开文件,保存文件,更改存储地址,退出记事本。 (2)“编辑”中有复制、剪切、粘贴、删除、查找、查找下一个、替换、替换下一个、全选、日期/时间十个字菜单:用于复制文字,剪切文字,粘贴文字,删除文字,查找文字,查找下一个文字,替换文字,替换下一个文字,选择文字,添加日期和者时间。 (3)“格式”中有字体样式、字体大小、字体颜色,自动换行。字体样式中又包含了正常、粗体、斜体3中字体样式,可以对文字的字体样式做修改。字体大小中又包含了最大、较大、适中、较小、最小这5个大小范围。字体颜色可以对字体进行颜色上的修改,是字体更加漂亮。自动换行能够实现文档在编辑是需要的自动换行功能。 (4)“视图风格”中有MOTIF风格,默认风格,状态栏。当用户选择MOTIF 风格,软件界面会切换成MOTIF风格界面。当用户选择默认风格,软件界面会切换成默认风格界面。点击状态栏时可以对状态栏进行显示和隐藏。 (5)“帮助”中有帮助主题和关于,可以解决用户在使用记事本中的一些问题。 (6)“快捷键”,在菜单栏下面增加了一排快捷键,可以对稳定进行快速的修改、操作等命令。快捷键主要有新建、打开、保存、复制、剪切、黏贴、删除、查找、字体颜色、帮助主题、退出。 2.对输入输出数据及流程的分析 本次设计中,设计了一个菜单栏和文本内容区。设计过程中用到了JScrollPane,JMenu,JTextPane,JFileChooser等。JMenu用来制作菜单,JTextPane主要用来输入文本。为了加入颜色的设置,所以加了一个JColorChooser组件。整个记事本分为2块:菜单栏和内容输入区。本程序中首先定义一个myfr类继承JFrame作为最底层容器。Textcontent为程序文本输入区。Menu为菜单栏。AboutDialog为关于对话框。要想记事本完成需求分析中相

OracleAQ消息队列的使用详解

Oracle AQ 消息队列(-) 随着不同应用模块间的消息交互和通信成为一个关键的功能,并且变得越来越重要。Oracle 引入了一种强大的队列机制,通过它程序间可以实现信息的交互,oracle把它称作为AQ - Advanced Queuing. 使用Oracle AQ,我们不需要安装额外的中间件,它是Oracle数据库的一个功能组件,只要你安装了Oracle 数据库就可以使用AQ了。接下来分两部分来介绍AQ的使用,使用之前我们要创建QUEUE. 我们创建一个自己的AQ的管理角色"my_aq_adm_role" 和管理用户"aqadm",再把Oracle AQ 管理角色"aq_adminstrator_role" 授权给"my_aq_adm_role". CREATE ROLE my_aq_adm_role; GRANT aq_adminsistator_role TO my_aq_adm_role 创建一个用户的角色"my_aq_user_role" 和普通用户"aquser" ,再把Oracle AQ的用户角色"aq_user_role"和一些基本操作需要的系统权限授权给"my_aq_adm_role" CREATE ROLE my_aq_user_role; GRANT CREATE session, aq_user_role TO my_aq_user_role; EXEC DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE( privilege => 'ENQUEUE_ANY', grantee => 'my_aq_user_role', admin_option => FALSE); EXEC DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE( privilege => 'DEQUEUE_ANY', grantee => 'my_aq_user_role', admin_option = 'FALSE'); 现在我们创建AQ管理用户

数据结构(Java版)(第3版)叶核亚 答案之用队列编迷宫(部分1)

//用队列: public class Maze { public int[][] maze = null; public int[] xx = { 1, 0, -1, 0 }; public int[] yy = { 0, 1, 0, -1 }; public Queue queue = null; public Maze(int[][] maze) { this.maze = maze; queue = new Queue(maze.length * maze.length); } public void go() { Point outPt = new Point(4, 5); Point curPt = new Point(0, 0); Node curNode = new Node(curPt, null); maze[curPt.x][curPt.y] = 2; queue.entryQ(curNode); while (!queue.isEmpty()) { curNode = queue.outQ(); for (int i = 0; i < xx.length; ++i) { Point nextPt = new Point(); nextPt.x = (curNode.point).x + xx[i]; nextPt.y = (curNode.point).y + yy[i]; if (check(nextPt)) { Node nextNode = new Node(nextPt, curNode); queue.entryQ(nextNode); maze[nextPt.x][nextPt.y] = 2; if (nextPt.equals(outPt)) { //判断是否到达终点 Queue storeQueue=new Queue(maze.length * maze.length); storeQueue.entryQ(nextNode); while ((curNode = nextNode.previous) != null) { nextNode = curNode; storeQueue.entryQ(curNode); } System.out.println("A Path is:"); while (!storeQueue.isEmpty()) { curNode = storeQueue.outQ(); //出栈 System.out.println(curNode.point); } return; } } } } System.out.println("Non solution!");

马士兵java基础笔记 pdf版 面向对象部分

一面向对象设计思想 ◆面向对象设计思想是,从现实世界中客观存在的事物出发构造软件系统,并在系统的构 造中尽可能运用人类的自然思维方式。 ◆面向对象更加强调运用人类在日常思维逻辑中经常采用的思想方法与原则,如抽象、分 类、继承、聚合、多态。 ◆对象用计算机语言对问题与中事物的描述,对象通过属性(attribute)和方法(method)来分 别对应事物所具有的静态属性和动态属性。 ◆类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一对象所因具有的静态 和动态属性。 ◆类可以看成一类对象的模板,对象可以看成该类的一个具体实例。 ◆类(对象)之间的关系: 1.关联关系:映射到代码一个类的方法里面是另外一个类的对象,我的方法的参数是 你这个类的对象 2.继承关系:什么什么是什么 3.聚合关系 聚集:谁谁是谁的一部分。组合:咱们俩密不可分! 4.实现关系:

5.多态 总结: ●考虑问题里面有哪几个类,哪几个对象;找名词 ●每种类有哪些属性和方法; ●类和类之间的关系。 二Java与面向对象 ◆对象是Java的核心,在Java中“万事万物皆对象”。 ◆对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体。 ◆类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所具有的成员变量以 及方法。 ◆为什么用对象? 1)Reusable 2)Extensiblity 3)维护和替换更加方便。 三Java中面向对象内存分析 1.Java类的定义 2.成员变量(返回值输出之后也消失,返回值在栈中) 3.引用 Java语言中除基本类型之外的变量类型都称之为引用类型。 Java中的对象是通过引用对其操作的。 引用类型占两块内存,堆栈中的引用,对里面的对象 String s = new String(“aaa”); s→[],s在栈中,”aaa”在堆里面。 4.对象的创建和使用 ◆必须使用new关键字创建对象。 ◆使用对象(引用).成员变量或来引用对象的成员变量。

【黑马程序员】毕向东老师Java基础入门教程笔记

【黑马程序员】毕向东老师Java基础入门教程笔记 毕向东Java基础视频教程_适合初学者入门 完整视频:https://www.360docs.net/doc/2410643379.html,/course/7.html?1911sxkqq 提取码:ks8m 课程资料:https://https://www.360docs.net/doc/2410643379.html,/s/1jAjI85SlUTlrTuF_J2QNeQ 提取码:4bfg 黑马程序员视频库网址:https://www.360docs.net/doc/2410643379.html,(海量热门编程视频、资料免费学习)学习路线图、学习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 / 3549664195 1.编程:人与计算机之间交流的过程就是编程。 2.Java语言特点:跨平台性。原理:JAVA程序是通过java虚拟机运行在系统平台上的, 只要该系统可以安装相应的java虚拟机,该系统就可以运行JAVA程序。 3.JRE和JDK的区别: JDK:开发工具包,JDK是提供给开发人员使用的工具包。 JRE:JAVA运行环境包括java虚拟机和java程序所需的核心类库。 4.JAVA虚拟机jvm 是JAVA语言的运行环境,jvm读取并处理编译过的与平台无关的字节码文件 5.JAVA程序运行机制 Java源文件通过javac.exe 编译器编译成字节码文件,然后再通过jvm运行。 6.Java中需要注意的地方:一个JAVA源文件只定义一个类,不同的类使用不同的源文件 定义;将每个源文件中单独定义的类都定义成public的;保持JAVA源文件的主文件名与源文件中的类名一致;

7.Main方法的作用:程序的入口,保证程序的独立运行,被JVM调用。 8.文档注释: 单行注释:// 多行注释/* */ 文档注释/** */ 9.标识符的命名规则: 由字母、数字、下划线、$组成,不能以数字开头,严格区分大小写,不能使用关键字,10.Java中的常量和变量 定义变量的格式:数据类型变量名=初始化值; 作用范围:定义开始到定义它的代码块结束,定义范围内的左大括号开始,到右大括号结束。同一作用范围内,不允许多个局部变量命名冲突; 常量分为:整型常量小数常量布尔型常量字符型常量空常量(null)。、 11.整型常量:三种表现形式:计算机中存放的是二进制最低组成单位是八位,每八位 表示一个字节。 分为十进制八进制十六进制 12.局部变量和成员变量 局部变量:不是声明在类体括号里面的变量; 局部变量使用前必须初始化值; 局部变量没有默认初始化值; 局部变量的作用域是从定义开始到定义它的代码块结束; 成员变量:在方法体外,类体内声明的变量,又称字段(Field)或全局变量;(其实Java中没有全局变量,由于Java是面向对象语言,所有变量都是类成员),没有初始化时,会被赋予默认的初始化值。

java课程设计记事本

攀枝花学院课程设计 题目:记事本程序设计 院(系):数学与计算机学院 年级专业: 姓名: 000000 学号: 指导教师: 二〇一三年十二月三十日 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书

课程设计(论文)指导教师成绩评定表

摘要 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。按照教学培养计划要求,学生在学习完课本中指定课时的知识后,应安排一定课时的课程设计。其主要目的是使学生深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等。故此“记事本”应运而生。 该报告中的程序是简易记事本。使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切等功能,不同之处是本程序能够对文字的颜色进行设置。该程序主要用到了Java swing和事件监听等。 关键字:记事本,Java,Java swing

目录 摘要................................................................ 1 前言 (1) 2 需求分析 (2) 需求分析 (2) 功能设计 (2) 3 概要设计 (3) 程序设计思路 (3) 程序运行界面 (3) 模块说明图 (3) 程序流程图 (5) 程序相关说明 (5) 4 程序详细设计与分析 (6) 初始化组件 (6) .构建菜单栏及其下拉菜单 (6) “文件”菜单的事件监听 (7) “编辑”菜单的事件监听 (7) 5 测试分析 (9) 结论 (11) 参考文献 (12) 附录 (13)

最精简的java 线程池与任务队列

以下资料为java培训为大家整理: 1 import java.util.*; 2 public class WorkQueue 3 { 4 private final int nThreads;//线程池的大小 5 private final PoolWorker[] threads;//用数组实现线程池 6 private final LinkedList queue;//任务队列 7 8 public WorkQueue(int nThreads){ 9 this.nThreads = nThreads; 10 queue = new LinkedList(); 11 threads = new PoolWorker[nThreads]; 12 13 for (int i=0; i

21 queue.addLast(r); 22 queue.notify(); 23 } 24 } 25 26 private class PoolWorker extends Thread {//工作线程类 27 public void run() { 28 Runnable r; 29 while (true) { 30 synchronized(queue) { 31 while (queue.isEmpty()) {//如果任务队列中没有任务,等待 32 try{ 33 queue.wait(); 34 }catch (InterruptedException ignored){} 35 } 36 r = (Runnable) queue.removeFirst();//有任务时,取出任务 37 } 38 try { 39 r.run();//执行任务 40 }catch (RuntimeException e) { 41 // You might want to log something here 42 }

相关文档
最新文档