11月21日

今天主要是测试题目讲解,oracle,eclipse安装,oracle大概介绍以及张老师的即兴演讲模板设计模式

 

严格来讲,今天是开学的第二天 ,但是却是正式上课的第一天 ,机器问题很多,速度很慢 , 有很多东西需要卸载…… 
Office和Oracle还没有安装好,现在还在安装

下面开始讲解eclipse的应用:

主要是熟悉eclipse的开发环境,包名使用类似于"cn.com.itcast"这样的形式,类名也要很直观,不要总使用aaa这样的名字,不好。

运行类的时候选择类上右键中的run as选项即可,eclipse的开发图形界面是swt,而不是awt或是swing(eclipse是ibm公司开发的)。

下面开始具体分析题目:

首先是字符串转换为整数的问题:

要求从控制台输入字符串并将其转换为整数!(这个我在题目中没有考虑,汗一个……)
import java.io.* ;

System.out.println("Please input an integer");

System.in.read();

想把一段代码用try块保护起来的话,先选中这段代码,然后alt加shift加s,再选择try和catch

try{
  while(true)
  {
    byte[] buf = new byte[512];
    int tem = System.in.read(buf) ; //tem是读入的长度,如果控制台输入的是12的话,那么还有一个/n和/r被读入了(在Linux中,不是/n和/r都被读入)
    String s = new String(buf,0,tem-2); //将缓冲区中的内容变成字符串输出。
    int i = Integer.parseInt(s) ;

    if(tem=='/n'||tem=='/r') break ;
  }


可以用System的getProperty方法通过传入一个key值来得到当前系统的环境,可以到网上下载一份儿
}

String s = new String(buf,0,tem-System.getProperty("line.separator").length) 这样可以做到跨平台

在linux中,System.getProperty("line.separator").length值是1。


十六进制的移位和去高位:

去高位:使用0x0000000f来与试验数字去作'&'运算,可以留下低四位,这个低四位得到后可以作相应的处理了;然后再右移四位来用同样的方法处理下一个低四位,就是间接的实现了除16取余数的工作了。


最后,老师发放了一下System.getProperty参数大全的word文档。


上午课程结束,中午开始安装oracle

 

中午回来后正好赶上张老师在,他顺便即兴说了一些东西,提到一个模板方法,也就是设计模式的问题。一期班的情况被高估了,当时本来想到是让所有人都可以熟练的掌握spring、hibernate、struts的整合,但是看起来现在是不切实际了,时间是很重要的问题,没有时间的积累,有些东西是没有办法掌握的,所以这是一个问题。

       一是有关外部类和内部类的问题,一个外部类的对象已经没有任何人去引用了,但是他自己有一个内部类仍然有引用,那么这个外部类是否会被回收呢?

外部类已经没有人引用了,但是外部类中的内部类还被引用,那么这个外部类是否会被回收???

class outer
{
  private int x ;
  class inner
  {
    private void print()
    {
      System.out.println(x);  //内部类中的print()方法完全可以打印外面类中的x
    }
  }
}

所以外部类是不可以被回收的,因为如果外部类真的被垃圾回收了,内部类中的print方法怎么办呢?


二是关于多线程中的线程安全问题,构造方法和set、get方法是否需要考虑同步问题。

构造方法是否要和其他方法进行同步呢?答案是否定的。既然有两个线程引用同一个对象,那么必须有至少两个变量x和y指向对象。就是说必须在类的构造函数执行后(对象创建完成后),才可能出现x和y指向同一个对象。只可能先是y = new Object();然后再是x=y,才能做到x和y都指向同一个对象。这就不涉及同步的问题了,构造方法只是在对象创建之后首次被调用一次而已,没有必要再和其他方法进行同步了。

三是调用构造函数,假如构造函数中抛出了一个异常,(构造方法提前结束了),那么内存中是否创建出了这个对象呢?
 
对象确实是创建出来了,空间也被分配了,构造方法是对象被创建之后才调用的,用来初始化对象的,只有对象存在才能够调用里面的所有方法,所以只有对象已经存在的前提下才能够调用构造方法来初始化。所以析构方法也是在对象消亡前才能使用!

在创建对象以及调用了构造方法后,会返回一个表达式给那个对应的引用,所以即便构造方法中抛出了异常,但是创建的对象已经存在,只不过呢,返回的表达式是null。

所以,X x = new X();

对象虽然已经存在了,但是x却肯定是null,因为new X()表达式的返回值是null。


-------------------------------------------------------------
三个问题解答完毕了,接下来是一个模板设计模式的讲解,之所以讲这个看来大概是张老师的即兴演讲,想把一个看似复杂的东东讲的一点都不复杂,我觉得好像这里面多少有点试验的意思,作为老师,就是有演讲的欲望,尤其是遇到一些有意思的东西更是刹不住嘴,应该是类似于这种情况吧,而我们呢,也算是第一次领略一下张老师讲课的风格。

原来一期学员之所以不用csdn上面的blog是因为校园网上csdn的速度实在是太慢了,于是有许多人就没有坚持在上面发放自己的日记,不过呢,我觉得发放一下也是有必要的,最起码,这会是我的第一个正经的博客,自己也算是认真一下吧。现在他们还没有进一步接触到项目,因为还有一些问题没有能够完全的弄清楚,看来……路不是很好走……

所谓的设计模式,就是特定编程环境下的特定的墨守成规的更有效,更快速、更优雅的方法。碰到具体问题时如何设计java类以及类与类之间的关系,就是具体的模式问题,这都是前人(当然这个“前人”还是西方人,在现代科技方面,我们已经没资格自称为前人了……)摸索过且总结出来的东西。


现在本来要使用桌面机,但是netmeeting出了点问题……只能看别人的了。终于看到张老师的桌面机了,不容易啊,现在还不知道如何更改自己的netmeeting姓名,以后再设置吧,麻烦的问题还是很多的,我还要弄清到底是些什么东西占用了我机器那么多的空间……


netmeeting的问题先暂时告一段落,比如一个remove(Object o),一个removeall(Collection c)方法,如何去编写呢?集合中的对象存储肯定不一定是相邻的顺序表结构,有可能是类似于链表或是树型结构等的其他结构。

如果要取出以链表结构为数据存储结构的各个对象,伪代码如下:

obj=第一个对象;
while(obj!=null)
{
 //处理obj对象
 obj = obj.next();
}

如果要取出以树型结构或是图结构存储的各个对象,情况会比较复杂,一般这种方法是别人给你定义好的,一般会返回Enumeration枚举集合,然后用next循环的方式把对象一个个的拿出来,如hashtable中的elments()方法就是类似的过程,这都是别人写好的,我们并不用关心方法编写的细节,只需要使用人家已经编写好的接口就可以了。vector、hashtable、hashset等集合都会有方法返回一个Enumeration对象,也就是一种公共的结构。

所以说,如果自己现在想要设计一个集合类,那么也需要按照这个思路来,里面要有一个返回所有对象Enumeration枚举的方法来得到所有的集合。这仅仅是开了个头,还和模板设计方法没有关系……

           set类有10个方法
      AbstractSet类有3个方法(它在这里起了个模板的作用,后面的hashset和treeset中为了具体实现这三个方法需要单独考虑自身情况)
hashSet类有7个方法     TreeSet类也有7个方法

hashSet和TreeSet是不同数据结构的集合类,存储数据方式也不一样,所以方法的实现内幕也是不同的,但是返回值是一样的,是公共的。

所谓模板设计模式就是公布一个方法的实现步骤,具体步骤中用到的具体方法让子类具体去实现,比如父类中定义好的removeAll可以看作是个模板,父类可以将removeAll方法中的remove方法作为抽象方法,其子类来具体的实现这些方法就可以,这就是模板方法。


经理调用员工的服务可以看作是父类的模板方法,而员工为了完成经理编写的这种调用员工为自己服务的方法而自己想出来的具体实现策略就是子类为了实现父类模板方法而需要的具体实现的一些子方法(一个或多个)。这可以说是模板设计模式的一个生活化的例子,刚才的remove和removeAll方法是模板设计模式在jdk中的一个例子。

再说一下集合对象中的equals方法,该方法用来比较两个集合中的每一个元素,这里肯定要用循环一个一个的比,比的过程中会用到get(i)方法,那么equals方法可以说是个模板,get(i)就是子类为了实现父类的equals方法而自己实现的

注意:模板设计模式在框架中的应用是很多的,尤其是在Spring中,这也是为什么张老师今天给我们讲模板设计模式的原因,因为1期学员今天在用代码练习这个模板模式,这个应用在框架中确实是太多太多……


oracle安装成功后根目录下共有3个文件夹:oradata,ora92,admin

主要在“方案”中的hr操纵表,在sqlplus中,标准的sql命令后面一定要加上分号,但是sqlplus命令后面不用加分号

框架是一套程序,好比盖房子:设计图纸,找地方,装修……等等有一套标准流程,这套标准流程相当于框架,假如继承了这套标准流程(继承类)那么仍然可以得到一个房子(虽然未必是自己想要),我们继承的这个类毫无疑问就是框架。子类中可以重写这个设计图纸方法,并return这张图纸,或是重写施工队方法,重写地皮位置方法得到的房子说不定会和自己理想中的一样。……所以这套已经被定下来的盖房子的流程框架和spring、hibernate、struts本质上是一样的,都是让你自己根据具体需求去填写细节。

写到这里我不得不说一句,张老师实在是太能说了,现在话匣子又敞开了,已经讲了一个多小时了,丝毫没有要停的意思……一个例子说了很长的时间,各方面都说的很细致。张老师说:“这些东西如果真的听进去那么境界有很大的提高”,这些模板的设计是架构师的工作,他们负责设计出整个流程框架,如spring,我们以后的工作几乎都是去根据具体需求来填空,但是为了填好空,框架还是要很熟悉才行,比如里面定义好的模板方法的作用自己一定要十分的清楚……
--------------------------------------------------------------

【为什么set与hashSet,TreeSet之间要有一个abstractSet?abstractSet类中的几个方法是怎么编写的?这几个方法与底层的具体类有什么样的关系?】这个问题需要自己讲一讲,如果能够讲明白的话就没什么问题了……

底层类之间的不同不会影响abstractSet类,abstractSet类提供的是个模板,它的中文翻译是抽象集合,也就是说,其中的方法具有公共代表性,在不同集合中都要出现,比如equals方法,removeAll方法等。这些方法每一个不同的集合肯定都要有的,它把每一个具体集合都具备的公共特征抽象出来形成一个模板,这也就是类的抽象特性,模板出来后,具体集合类中要如何实现这些公共的方法就是它们自己的事情了。

----------------------------------------
      现在在安装oracle,而且我们二期班现在netmeeting出现了问题,总是出现许多人无法同时连接上的问题,现在还没有完全解决好……刚才看了一下,我的Windows竟然有将近4个G!而这个oracle要占据硬盘空间2.5G!好家伙,简直是抢劫啊……看来得想办法删点东西了


netmeeting的问题实在麻烦,以至于无法解决,不得已只好趁着明天休息的功夫重装系统了,以后我们是每个周三休息,其他六天都是上课。希望明天系统全部都重做后会解决所有的问题,我的系统跑起来估计也会顺畅不少啊……

因为netmeeting以及oracle安装问题耽误了好长时间后,老师终于开始讲解oracle了,由于没有netmeeting无法演示,老师现在只是讲一些历史性的东西,所谓oracle9i的‘i’指的是internet,现在最新的版本是oracle10g,所谓的‘g’是grid,也就是网格技术。oracle公司的第一位员工名叫scott,他养了指只猫叫做tiger,后来scott和tiger可以用于oracle数据库的一个用户名和密码。oracle总裁是Miner,他一个人写出了最早的oracle数据库。后来的所有工作交给了scott,1983年scott共写了1到3的oracle版本,实在受不了了,1983年撤了股,走人了,卖掉了自己所占的4%的股份,结果后来oracle的股值暴涨,达2.7亿美元……oracle创建者三个:Ellison、Scott和Miner。

我们主要讲的是oracle9i,然后以它为平台学习里面的sql语句,班里有一个人从来没有用过结构化查询语言。sql语句是ibm公司提出来的,ibm公司现在主推java,所以学java前景应该也不错。标准sql中有insert、delete、update、select等9个动词,但是oracle对这些标准sql做了扩展。所以标准的sql要学,oracle中的函数和扩展的sql以及PL/SQL(Procedure Language for SQL),为sql定制的过程化语言,以及触发器,存储过程等东西,oracle的高层管理暂时不去学,以后请外面的企业里面的人讲解。


刚才找到了netmeeting连接不成功的症结所在,原来是和一期班同学的netmeeting混淆在了一起(具体原因我也不清楚),反正看样子系统是不重装了,我的梦想也泡汤了,这破玩意还得继续使啊……惨!……

现在ip全部改为了192.168.1.x了,现在正在实验netmeeting的功能,希望不要很好用啊,我还是比较希望能够重装系统,毕竟我这个系统实在是太……烂了

 

oracle卸载问题:一是Hkey_local_mashine中的software里面的oracle文件夹要全部删除,还有system中的current_controlset中的service里面的oracle服务要删除,当然删除服务前要在服务中把对应服务停止才可以!


OracleOraHome92TNSListener、以及OracleServiceOrcl服务必须启动,否则根本无法启动oracle数据库。

在运行中,敲打sqlplus /nolog进入命令行,然后写connect sys/sys as sysdba; 就可以进去了。

注意:在本地,如果输入connect / as sysdba;也是可以以系统管理员的身份登陆的

isqlplus(网页式登陆数据库,需要启动一个oracle的http服务),sqlplus(命令行方式访问数据库),还有用OEM可视化应用程序来登陆oracle数据库。

我们主要使用的是sqlplus方式登陆数据库

 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值