第六讲 韩顺平Java核心编程 22~26
- 格式:pdf
- 大小:2.64 MB
- 文档页数:28
第一讲:Hibernate是什么?1、它是一个框架2、是一个orm框架(其它的apache ojb,ibatis,toplink)a)Orm(object relation mapping)对象关系映射框架b)O object-->业务层c)R relation-->关系数据库d)M mapping-->对象关系映射文件3、处于我们项目的持久层位置4、对JDBC的轻量级封装Hibernate的原理:1、相当于是一个翻译,业务逻辑层--->持久层-->数据库,所以业务逻辑层就不用关心用的是什么数据库,而直接和持久层打交道,持久层将从业务逻辑层得到的语句(并进行一系列优化)翻译成数据库的语句,实现一些功能。
这样当数据库变更时,我们就不用改动业务逻辑的一些sql语句。
2、每一层的耦合性减小,业务层和数据库层没有关系,可以达到轻松改变3、Hibernate可以用在j2se中4、Struts是web框架为什么有hibernate:以前我们换数据库需要重写SQL语句,和一些其它的语句,麻烦,第二讲:1、开发时一般先开发DB,在用工具生成mapping和domain2、Domain对象的名称首字母要大写3、Pojo (plain ordinary java object) 简单的JA V A对象和一张表对应(应该有一个键属性,有GET,SET方法,有一个无参的构造函数)4、对象关系映射文件:作用是用于指定domain对象和表的映射关系,取名:domain 对象。
Hbm.xml。
一般我们放在和domain对象同一个文件夹下(一个包下)5、创建一个sequencei.Create sequence emp_seqStart with 1Increment by 1Minvalue 1NomaxvalueNocycleNocache6、<hibernate-mapping><class name="Employee" table="employee" ><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主健值生成策略hilo native increment sequence uuid --><generator class="sequence"><!-- 指定是哪一个sequence --><param name="sequence">emp_seq</param></generator></id><!-- 定义的属性--><property name="name" type="ng.String"><column name="name" not-null="false"></column></property><property name="email" type="ng.String"><column name="email" not-null="false"></column></property><property name="hiredate" type="java.util.date"><column name="hiredate" not-null="false"></column></property></class></hibernate-mapping>7、创建hibernate.cfg.xml并且配置<hibernate-configuration><session-factory><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</p roperty><property name="ername">scott</property><property name="connection.password">tiger</property> <propertyname="connection.utl">jdbc:oracle:thin:@localhost:1521:orcl</prop erty><!-- 明确告诉hibernate连接的是哪类数据库 --><propertyname="dialect">org.hibernate.dialect.OracleDialect</property> <!-- 用于加载映射文件 --><mapping resource="com/yxl/domain/Employee.hbm.xml"/> </session-factory></hibernate-configuration>8、运用hibernatea)创建cfg对象,用于读取hibernate.cfg.xml的内容i.Configuration cfg = new Configuration.configure();b)创建sessionFactory这是一个会话工厂,是一个重量级的对象i.SessionFactory sf = configuration.buildSessionFactory();c)创建Session 相当于jdbci.Session session = sf.openSession();d)创建transactioni.Transaction transaction = session....();第四讲:一个数据库对应一个SessionFactory,它是单例的Pojo应该序列化,目的是唯一标识该对象,同时可以在网络上传输Hibernate 把对象分成三个状态:瞬时态,持久态,第五讲:<property name="show_sql">true</property>这是打印SQl语句<property name="hbm2ddl.auto">create</property>这是自动创建表的配置(如果有表则删除后重新创建一个表),也可以有update 这是更新表(如果以前的表没有改变结构,则更新值,如果没有表则创建)Mysql中没有sequence 用increment代替第六讲:编程格式:Try {......mit();} catch(Exception e) {e.printStackTrace();If(transaction!=null) {Transation.rollback();}} finally{If(session!=null&&session.isopen()) {Session.close();}}如果要自己定义主键号,则hbm.xml中的generator的策略用assigned第七讲:当configuration.configure(configNume) 这里的confignume有包名的话要写"com/yxl/config/hibernate.cfg.xml"1、Configuration 类A:读取hibernate.cfg.xmlB:管理对象关系映射文件C:加载hibernamte的驱动,url,用户D:管理hibernate配置信息注意事项:当配置时cfg.xml有包,则得把包名写在configure方法里2、..hbm.xml是一个表和对象的映射文件,一般和对象放在一个包下第八讲:1、SessionFactory :会话工厂:是一个interface作用:A:可以缓存sql语句和数据(称为session缓存)B:是一个重量级的类,比较吃内存,所以一个数据库对应一个SessionfacC:重点:用SessionFactory得到session的两个方法:1.openSession():是获取一个新的Session();2.getcurrentSession() 获取和当前线程绑定的session,就是在同一个线程获得的session是同一个。
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件(.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释ava文件)2、java编译器即3、java字节码文件(.class文件)4、由解释执行器即将字节码文件加载到java虚拟器(jvm)5、字节码文件(.class)就会在java虚拟机中执行对程序进行改过使之变为一个简单的加法运算程序;.case 常量n:语句n;break;default:语句;break;}*****:switch中的可用数据类型主要是:允许byte,short,int,char,enum等1、单分支控制作业:请大家看个案例[]:编写一个程序,可以输入人的年龄,如果该同学的年龄大于18岁,则输出“你年龄大于18,要为自己的行为负责!”2、双分支控制作业:请大家看个案例[]:编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你年龄大于18岁,要对自己的行为负责!”否则,输出“你的年龄不大这次放过你了”3、多分支控制作业:请大家看个案例[]编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你年龄大于18,要对自己的行业负责,送入监狱”。
如果该同志的年龄大于10岁并且小于等于18,则输出“你的年龄也不小了,把你送少管所”。
其它情况,则输出“小孩子,下次注意”。
4、多分支控制作业:请大家看个案例[]请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,ga表示星期一,b表示星期二...根据用户的输入显示相应的信息,要求使用switch语句完成。
5、多分支控制作业:请大家看个案例[]对比switch与if语句在执行分支语句的区别。
Java韩顺平笔记第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划 1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界 1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exe java的类库:3600多个,常用的150多个5. 第一个程序://功能:显示―HelloWorld‖//public:表示类是公共的,一个文件中只有一个public类 //class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld {//一个主函数,程序的入口 public static void main (String args[]) { //执行语句System.out.println("helloWorld!"); } }6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行l,average); } }第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节:)小数(浮点):float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3.在java中对char进行运算的时候,直接是当做ASCII码对应的整数4.数据不能从高精度到低精度的转换Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; intb=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;double b=a+1.2; 或者int a=1;float b=a+1.2f; 就解决了第4讲流程控制1. switch case语句中,switch条件表达式的数据类型应该和后面case的类型一致2. switch case语句中,可用的数据类型主要是:byte short int char enum第5讲类与对象1. 面向对象编程-类与对象类名首字母大写类里面的元素叫类的成员变量/属性2. 类的定义package 包名;class 类名extends 父类implements接口名{成员变量;构造方法;成员方法;}3. 如何创建对象:先声明再创建Cat cat1;cat1=new Cat();一步到位Cat cat1 =new Cat();4. 引用传递类似于指针一样第8讲this 类变量1. this属于类的对象的而不是属于类的2. 5this不能在类的外部使用,只能在类定义时候使用!3. 可以用类名直接访问静态变量第9讲类方法封装1.类变量是该类的所有对象共享的对象,一改全改了2.定义语法:访问修饰符static 数据类型变量名3. public class Demo9{static int i=1;static{System.out.println("zhixingyicile");i++;}//会自动执行一次,也只有一次public Demo9(){System.out.println("ffffffff");i++;}public static void main(String args[]){Demo9 t1=new Demo9();System.out.println(Demo9.i);Demo9 t2=new Demo9();System.out.println(i);}}4.类方法(静态方法、静态函数):属于所有对象实例的5.Java中:类变量(static)原则上用类方法(static)去访问;类方法中不能访问非静态变量,就是非类变量,但是普通的成员方法可以访问静态变量(类变量)使用:类名.类方法名对象名.类方法名6.非类变量就是实例变量,属于每个对象自己的7.Java面向对象编程的三(四)大特征:封装、继承、多态(、抽象)8.抽象:把一类事物的共有的属性和行为提取出来,形成一个物理模板,此研究问题的方法就是抽象9.封装:把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。
韩顺平的java教程中数据库的源代码(mysql版)一:建库和建表:1.创建数据库:create database lsydb1 default character set utf8;use lsydb1;2.创建表(dept):create table dept (deptno int primary key, dname nvarchar(30), loc nvarchar(30)) default character set utf8; 3.创建表(emp):create table emp ( empno int primary key, ename nvarchar(30), job nvarchar(30), mgr int , hiredate datetime, sal decimal(6.2), comm decimal(6.2), deptno int ,foreign key(deptno) references dept(deptno)) default character set utf8;4.向dept表插入数据(先插dept再插emp):insert into dept (deptno, dname, loc)values (10, 'ACCOUNTING', 'NEW YORK'),(20, 'RESEARCH', 'DALLAS'),(30, 'SALES', 'CHICAGO'),(40, 'OPERATIONS', 'BOSTON');dept表如下:+--------+------------+----------+| deptno | dname | loc |+--------+------------+----------+| 10 | ACCOUNTING | NEW YORK || 20 | RESEARCH | DALLAS || 30 | SALES | CHICAGO || 40 | OPERATIONS | BOSTON |+--------+------------+----------+5.向emp表插入数据insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values(7369,'SMITH','CLERK',7902,'1980-12-17',800.00,NULL,20);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7521, 'WARD', 'SALESMAN', 7698, '1981-2-22', 1250, 500, 30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7566, 'JONES', 'MANAGER', 7839, '1981-4-2', 2975, null, 20);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7654, 'MARTIN', 'SALESMAN', 7698, '1981-9-28', 1250, 1400, 30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7698, 'BLAKE', 'MANAGER', 7839, '1981-5-1', 2850, NULL, 30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7782, 'CLARK', 'MANAGER', 7839, '1981-6-9', 2450, NULL, 10);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7788, 'SCOTT', 'ANALYST', 7566, '1987-4-19', 3000, NULL, 20);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7844, 'TURNER', 'SALESMAN', 7698, '1981-9-8', 1500, 0, 30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7876, 'ADAMS', 'CLERK', 7788, '1987-5-23', 1100, NULL, 20);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7900, 'JAMES', 'CLERK', 7698, '1981-12-3', 950, NULL, 30);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7902, 'FORD', 'ANALYST', 7566, '1981-12-3', 3000, NULL, 20);insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7934, 'MILLER', 'CLERK', 7782, '1982-1-23', 1300, NULL, 10);emp表:+-------+--------+-----------+------+---------------------+------+------+--------+| empno | ename | job | mgr | hiredate | sal | comm | deptno |+-------+--------+-----------+------+---------------------+------+------+--------+| 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 | NULL | 20 || 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300 | 30 || 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500 | 30 || 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 | NULL | 20 || 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400 | 30 || 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 | NULL | 30 || 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 | NULL | 10 || 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 | NULL | 20 || 7839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000 | NULL | 10 || 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0 | 30 || 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL | 20 || 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | NULL | 30 || 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 | NULL | 20 || 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 |+-------+--------+-----------+------+---------------------+------+------+--------+二.基本查询操作:1.如何查询工资在2000到2500的员工情况select * from emp where sal> 2000 and sal < 2500; select * from emp where sal between 2000 and 2500; between是取两边的包括2000和2500.2.模糊查询:显示首字母为S的员工的姓名和工资select ename ,sal from emp where ename like “s%”;3.显示empno为123,345,800..的雇员情况。
韩顺平循序渐进学java从入门到精通课件笔记29讲到31讲项目经理:1、懂技术2、懂行业图形界面(gui)1、sun已经提供了一个跨平台gui开发工具包awt提供了好多类与接口。
但有缺点《致命的一个本地化lcd》2、sun又创建了一个swing框架,解决了lcd问题。
swing是awt的升级版本。
就是继承的关系。
3、IBM认为swing消耗内存,创建了一个新的gui库,就是swt。
4、IBM为了方便开发swt程序,在swt基础上又创建出一个更易用,功能强大的图形包JFace。
我们重点学习swing。
了解awt。
做图形界面在MyEclipse下开发。
Eclipse最早是IBM附属公司oti开发的。
是开源的,可扩展的开发环境,是最流行的java 开发工具,但是不能开发java ee项目,否则需要安装MyEclipse,现在一般都安装MyEclipse,不单独安装Eclipse。
IDE 集成开发环境。
(vs2005 jcreater MyEclipse等等)开发java的IDE:NetBeans jbuilder jcreater MyEclipseswing组件一览表JFrame是Frame的子类,JButton也属于容器类的布局管理器:通过布局管理器来管理控件的大小与位置。
共五种,常用3种,流式布局管理器,边界布局管理器,网格布局管理器,卡片布局管理器,网格包布局管理器第三十讲:边界布局管理器:将容器化为东南西北中五个区域,中间区域最大。
JFrame JDialog对话框自建默认的是边界布局。
注意事项:1、不是五个部件都必须添加2、中部组件会自动的调节大小3、JFrame JDialog默认布局管理器就是BorderLayout。
/***BorderLayout布局*1继承JFrame*定义需要的组件*创建组件(构造函数)*添加组件*对窗体设置*/package com.test1;import java.awt.*;import javax.swing.*;public class Demo8_2 extends JFrame {JButton jb1,jb2,jb3,jb4,jb5;public static void main(String[] args) {Demo8_2 dd =new Demo8_2();}public Demo8_2(){//创建组件jb1=new JButton("中部");jb2=new JButton("北部");jb3=new JButton("东部");jb4=new JButton("南部");jb5=new JButton("西部");//添加各个组件this.add(jb1,BorderLayout.CENTER);this.add(jb2, BorderLayout.NORTH);this.add(jb3, BorderLayout.EAST);this.add(jb4,BorderLayout.SOUTH);this.add(jb5, BorderLayout.WEST);//设置窗体属性this.setTitle("这是一个演示窗体");this.setSize(200,200);this.setLocation(500, 500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}流式布局flowLayout,从左到右跟网页差不多注意事项:1、流式布局不限制所管理组件的大小,允许他们有最佳大小2、当容器被缩放时,组建的位置可能发生变化,但是组建的大小不发生变化(做编程时,通常不许窗口大小变化)3、默认组件是居中对齐的package com.test1;import java.awt.*;import javax.swing.*;;public class demo8_3 extends JFrame{//定义需要组建.JButton jb1,jb2,jb3,jb4,jb5,jb6;public static void main(String[] args) {demo8_3 demo=new demo8_3();}//构造函数public demo8_3(){//创建组件jb1=new JButton("关羽");jb1.setSize(100, 200);jb2=new JButton("张飞");jb3=new JButton("刘备");jb4=new JButton("诸葛亮");jb5=new JButton("曹操");jb6=new JButton("魏延");//添加组件this.add(jb1 );this.add(jb2 );this.add(jb3 );this.add(jb4 );this.add(jb5 );this.add(jb6 );//设置布局管理器,流式布局默认的是居中对齐this.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置窗体属性this.setTitle("这是一个演示窗体");this.setSize(200,280);this.setLocation(500, 500);//禁止用户修改控件大小.this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);}}网格布局:网格布局容器分割为多行多列,将组件放在格中。
韩顺平Java(持续更新中)原创上课笔记,转载请注明出处第⼀章⾯向对象编程(中级部分) PDF为主1.1 IDEA删除当前⾏,ctrl+y复制当前⾏,ctrl+d补全代码,alt+/添加或者取消注释,ctrl+/导⼊该⾏需要的类,alt+enter快速格式化代码,ctrl+ALT+L快速运⾏程序,alt+r(⾃⼰设置)⽣成构造器等,alt+insert查看⼀个类的层级关系,ctrl+H,继承有⽤(光标放在类名上)快速定位某个⽅法的位置,ctrl+B(ctrl+⿏标点击)⾃动分配变量,main⽅法中,.var,例如new Scanner(System.in).var查看快捷键模板:Live Templates (例如,fori)1.2 Object类详解(equals、==、hashCode等)所有类都实现了Object类,都能使⽤Object类的⽅法。
1.2.1 ==运算符基本类型—>判断值是否相等引⽤类型—>判断地址是否相等指向同⼀个地址,结果为true1.2.2 equals()⽅法1.2.2.1 基本介绍Object的equals()⼀⽬了然,==运算符,⽤来判断地址是否相等⽽String等类的equals()被重写了,⽤来判断内容是否相等(根据需求,判断内容相等的标准也是可能会有所改变的)如何重写equals⽅法:Person person1 = new Person("jack", 10, '男');Person person2 = new Person("jack", 20, '男');System.out.println(person1.equals(person2));//假,如果没有重写Person类的equals⽅法,这⾥的equals⽅法调⽤的Object的(即,判断的是地址)⽰例代码://重写Object 的 equals⽅法public boolean equals(Object obj) {//判断如果⽐较的两个对象是同⼀个对象,则直接返回trueif(this == obj) {return true;}//类型判断if(obj instanceof Person) {//是Person,我们才⽐较//进⾏向下转型, 因为我需要得到obj的各个属性Person p = (Person)obj;return .equals() && this.age == p.age && this.gender == p.gender;}//如果不是Person ,则直接返回falsereturn false;}1.2.2.2 课堂练习第三个输出:因为Person并没有重写equals,所以这⾥调⽤的equals⽅法是Object的,判断地址是否相同的,⽽这两个新的对象肯定不相等,所以返回false 这道题需要注意的是,基本数据类型的==运算符是判断内容的1.2.3 hashCode()⽅法1.2.4 toString()⽅法全类名:包名+类名/**Object的toString() 源码(1)getClass().getName() 类的全类名(包名+类名 )(2)Integer.toHexString(hashCode()) 将对象的hashCode值转成16进制字符串*/public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}1.2.5 finalize()⽅法public class Finalize_ {public static void main(String[] args) {Car bmw = new Car("宝马");//这时 car对象就是⼀个垃圾,垃圾回收器就会回收(销毁)对象, 在销毁对象前,会调⽤该对象的finalize⽅法//,程序员就可以在 finalize中,写⾃⼰的业务逻辑代码(⽐如释放资源:数据库连接,或者打开⽂件..)//,如果程序员不重写 finalize,那么就会调⽤ Object类的 finalize, 即默认处理//,如果程序员重写了finalize, 就可以实现⾃⼰的逻辑bmw = null;System.gc();//主动调⽤垃圾回收器System.out.println("程序退出了....");}}class Car {private String name;//属性, 资源。
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
编程语言:人和计算机的交流方式编程语言排行榜:java、c、c++、vb Delphi........\编程语言的分类:所谓的编程语言一般分为五类:1、脚本语言:如aso、php、jsp等。
2、解释型语言:如vb、perl、Pthon等。
3、混合型语言:如java、c#等。
4、编译型语言:如c/c++、Delphi等。
5、汇编语言:如8086语言汇编、win32汇编等。
当然,也可以分为高级语言(c/c++、Delphi、java)和低级语言(汇编)。
编程语言也可以分为编译型语言和汇编语言。
Java编程可以分为3个方向:1、java se(j2se)桌面开发2、Java ee(j2ee)web开发3、java me(j2me)手机开发Java se课程Java 面向对象编程Java图形界面Java数据库编程Java文件io流Java网络编程Java多线程Java开发工具:记事本(低级工具)jcreator jbuilder netbeans eclipse (培养代码感)一个字节=八个位在内存里,二进制表示的第一位是符号位:1表示负,0表示正。
计算一个数据类型所能取值范围—(2字节数*8—1)~~2字节数*8—1—1数据类型所占内存大小:byte 1个字节范围在(-128至127)、short 2个字节范围在(-32768至32767)int 4个字节范围在(-2147483648至24147483647)long 8个字节Char数据类型只能表示一个字符,也可以表示一个汉字,多个字符要用String,但是string不是数据类型,而是类。
在java中,对char进行运算,把其当做ascii码代表的进行运算再在转化成ASCII码。
而运算int 的字符,就是运算字符代表的ASCII码的数字。
数据可以从高精度向低精度转换,反之不可以。
(byte<short<int<long<float<double )在java中,浮点型常量均默认位double型。
Java核心技术习题答案马志强张然李雷孝编清华大学出版社目录第一章Java语言概述 (3)第二章 Java语法基础 (4)第三章面向对象编程 (15)第四章数组 (38)第五章高级类特性 (45)第六章 GUI编程 (51)第七章集合框架 (62)第九章集合框架 (77)第十章 IO流 (81)第十一章 JDBC访问数据库 (84)第十二章线程 (85)第十三章网络编程 (90)第一章Java语言概述一、选择题1-5 ABBBB6-8 AAB二、填空题1. MyClass MyClass.class2. String数组(String[])一3. javac A.java java A三、程序设计题1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!”。
1)首先安装JDK;2)配置环境变量path,classpath可配可不配;3)FirstJava.javapublic class HelloWorld{public static void main(String[] args){开始学习Java程序设计!");}}2、修改下面四个Java源文件中的错误,使其能够编译和运行。
Test1.java:TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰;Test2.java:源文件中public修饰的类的名字为Testing2,和源文件名字不一致;Test3.java:Test3类的main方法的形参类型为String[];Test4.java:Test4类的main方法必须使用static关键字修饰。
第二章 Java语法基础一、选择题1-5 BCADB6-9 DCCC二、填空题1. abc ,a1, _abc, _1a, ab123#a,const,$abc,1abc,if,$#1sa,$_a,_$q12.题目出现问题:代码修改为 ch = (char) (ch+1);结果为’B’;如果直接结果为98。
Java学习笔记(讲师:韩顺平)整理:reamd1、先建一个工程——>包——>类2、java中类名首字母大写方法名的首字母是小写的①匈牙利法:myCode②下划线法:my_code3.先设计类 然后根据类创建对象实例化一个开辟一个内存设计类的过程class 类名{};设计类的属性时,尽量带着private的控制访问符号,如需要访问类私有的属性,可通过构造一个公共的方法去给予外界一定的访问权。
(1)构造方法,在建立一个新的对象时会自动调用构造方法初始化成员属性。
(注:若类的形式为:class Clerk{int age;};则构造函数的形式为public Clerk(int age){ this.age=age;};)(2)类方法:public static int total() {方法语句;}4. this指向一个对象,而不是类this只能在类定义中用5.(1)static int a;a称为静态变量或类变量,因此其可以被任何一个变量访问;因此它不是任何一个实例所共有的6.java面向对象语言的三大特征:封装、继承、多态。
(可附加:抽象)(1)封装:访问控制符Public 对外公开Protected 对子类和同一个包公开默认向同一个包公开private 只有类本身才可以访问(2)能够继承的访问控制为:Public protected 默认(3)方法的重载方法的名称相同、方法的参数不同。
方法的覆盖:方法的名称相同就把父类覆盖了。
不能把父类方法的访问权限缩小。
(4)多态大类下创建实例,能够自动识别。
7.抽象类,接口,final(1)抽象类:用abstract关键字来修饰一个类,抽象方法不能有主体。
(2)接口:interface 接口名class 类名implements 接口名Implement实现原则:当一个接口实现了,就要求实现接口中的所有方法。
原则:接口不能被实例化;接口中的所有方法不能有主体,(3)final 修饰不希望被他人修改的父类的属性和方法。
/*** 功能:简易学生管理系统* 1.能过姓名查询。
* 2.增.删.改学生信息**/package com.sutmanage.version2。
import java.awt.*。
import java.awt.event.ActionEvent。
import java.awt.event.ActionListener。
import java.awt.event.MouseEvent。
import java.awt.event.MouseListener。
import java.util.*。
import javax.swing.*。
import com.mysql.jdbc.PreparedStatement。
import java.sql.*。
public class StuManageSystemVersion1 extends JFrame implements ActionListener{b5E2RGbCAP//定义组件,界面由三部分组成,上部是姓名查询部分,为一个JPanel,中间是一个JScorllPane,底部也是一个JPanel,放了三个按钮p1EanqFDPw JPanel top,bottom。
JScrollPane jsp。
JTable jt。
JButton search,add,delete,update。
JLabel name。
JTextField jtf。
StuModel sm=null。
public StuManageSystemVersion1(>{//创建组件//Top组件top=new JPanel(>。
name=new JLabel("请输入姓名">。
jtf=new JTextField(22>。
search=new JButton("查询">。
search.addActionListener(this>。
1.集合框架√2.泛型√3.异常√1.掌握常用的集合类(接口)2.充分理解什么是泛型3.掌握java中的异常■一个问题?前面我们学习了数组,充分体会到数组的优越性,就是可以存储同一类型的数据,但是我们假设有这样的需求,大家看看如何解决?请做一个公司职员薪水管理系统,要求完成如下功能:①当有新员工时,将该员工加入到管理系统①可以根据员工号,显示该员工的信息.②可以显示所有员工信息③可以修改员工的薪水⑤当员工离职时,将该员工从管理系统中删除⑥可以按照薪水从低到高顺序排序【思考题】⑦可以统计员工的平均工资和最低和最高工资.■问题分析当然,我们可以使用数组来解决,可是用数组的话,有什么问题,我们来看看:■解决之道-链表或是集合类我们想,如果有这样一种数组,它可以动态的改变就好了,java的设计者为我们提供了一系列的集合类,我们来看看.■解决之道-链表或是集合类我们想,如果有这样一种数组,它可以动态的改变就好了,java的设计者为我们提供了一系列的集合类,我们来看看.■解决之道-链表或是集合类■使用从上面的图可以看出java集合类主要有以下几种: List结构的集合类ArrayList类, LinkedList类, Vector类,Stack类Map结构的集合类HashMap类,Hashtable类Set结构的集合类HashSet类,TreeSet类Queue结构的集合Queue接口■使用我们给大家举几个案例来看看集合类的常用方法:【Demo6_1.java】和【Demo7_3.java】■具体应用在我们熟悉了一些集合类的基本用法后,我们来解决前面提出的公司职员薪水管理系统。
首先我们使用ArrayList这个集合类.案例【Demo7_2.java】■ArrayList和Vector的区别ArrayList与Vector都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别:一.同步性:Vector是同步的。
这个类中的一些方法保证了Vector中的对象是线程安全的。
而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。
因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
二.数据增长:从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。
当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。
所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
■HashMap和Hashtable的区别HashMap与HashTable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别:一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
二.同步性:Hashtable是同步的。
这个类中的一些方法保证了Hashtable中的对象是线程安全的。
而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。
因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
三.值:HashMap可以让你将空值作为一个表的条目的key或value但是Hashtable 是不能放入空值的(null)注意: Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
■进一步理解集合框架java的设计者给我们提供了这些集合类,在后面编程中是相当有用的,具体什么时候用什么集合,要根据我们刚才分析的集合异同来选取。
我这里根据自己编程经验总结几点:①如果要求线程安全,使用Vector、Hashtable②如果不要求线程安全,应使用ArrayList,LinkedList、HashMap,LinkedHashMap③如果要求键值对,则使用HashMap,Hashtable④如果数据量很大,又要线程安全考虑Vector思考:请大家把薪资管理系统用你认为最好的集合来实现.■泛型的基本概念泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
Java语言引入泛型的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。
对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
■泛型的基本概念我们来看几个案例加深对泛型的理解:【Demo6_2.java】java->反射机制.■泛型的优点使用泛型有下面几个优点:①类型安全②向后兼容③层次清晰④性能较高,用泛型编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件.■基本概念当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述。
JAVA中用2种方法处理异常:1.在发生异常的地方直接处理;2.将异常抛给调用者,让调用者处理。
■快速入门class Abc{public static void main(String []args){ int i=2/0;s.o.p(“hello”);}}class Abc{public static void main(String []args){ try{int i=2/0;}catch(Exception e){s.o.p(“0不能做除数”)}s.o.p(“hello”);}}■异常分类(1)检查性异常:ng.Exception(2)运行期异常:ng.RuntimeException(3)错误:ng.Error顶层是ng.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。
ng.Exception和ng.Error继承自ng.Throwable,而ng.RuntimeException继承自ng.Exception.■异常分类检查性异常:程序正确,但因为外在的环境条件不满足引发。
例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口,或者是打开不存在的文件时。
这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。
对商用软件系统,程序开发者必须考虑并处理这个问题。
JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常:这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器在编译时不会发现这类异常。
错误:一般很少见,也很难通过程序解决。
它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽、运行时找不到某个类等。
错误在程序中无须处理,而由运行环境处理。
【案例Demo6_3.java】■异常处理1.try...catch程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。
int a[] ={4,6,9,90};try{int a[10]=10;}catch(Exception e){s.o.p(“数组越界!”);// getMessage();toString(); printStackTrace();}System.out.println(“go on…”);■异常处理2.finally如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。
以下情形,finally块将不会被执行:(1)finally块中发生了异常;(2)程序所在线程死亡;(3)在前面的代码中用了System.exit();(4)关闭CPU。
我们举例说明【Demo6_4.java】■异常处理2.finally 细节讨论int i=0;try{i++;return i;}catch(Exception e){ e.printStackTrace(); }finally{i++;}return i;返回的i 是多少?try{//代码}finally{//关闭资源.}没有catch 语法是否正确?■异常处理将异常抛给调用者,让调用者处理异常throws我们举例说明【Demo6_5.java】以下方式:①直接抛出[调用者需要处理]②捕获后,创建编译异常抛出[调用者需要处理]③捕获后,创建运行异常,并抛出[调用者无需处理]■异常处理3.多个异常的处理规则定义多个catch可精确地定位异常。
如果为子类的异常定义了特殊的catch块,而父类的异常则放在另外一个catch块中,此时,必须满足以下规则:子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。
所以,越特殊的异常越在前面处理,越普遍的异常越在后面处理。
这类似于制订防火墙的规则次序:较特殊的规则在前,较普通的规则在后。
■异常处理3.多个异常的处理规则主讲韩顺平。