重拾Java(六)

 由于昨天网络有问题,今天一并发了。

06-09-21:
HelloJava3: The Button Strikes
方法重载,Component是Java所有的GUI组件的基类,他包含了一些变量,代表位置,形状,大致外貌,对象状态,基本的绘制和事件处理,Container维持一系列的子组件,并且分组排列他们。

布局:(这个是我觉得Java一直以来做得不怎么方便使用的地方,没有微软的直接拖放式的方式,当然我知道是因为Java跨平台的原因。布局对我用惯了拖放式GUI的来说,不利于我们初学,我记得当时我就是因为布局没有理解透彻,心里老是觉得Java的窗体应用程序不好弄)layoutManager决定显示GUI的位置。

更多的事件和接口:JButton产生了另一个事件ActionEvent。actionPerformed方法中,你必须明确是哪个Button产生的事件。在Java中,==用来identity,不是用来equality;我们认为两个String对象是equal的,如果他们有相同顺序字符。然而他们可能不是同一个对象。

讲了静态成员,数组和Color类,还有synchronized关键字,用来表示方法必须互斥。

HelloJava4: Netscape's Revenge:
Runable接口:实现这个接口的类,必须实现run方法。异常:在运行过程中出现错误时,发送的一条消息。异常的行为有点像事件。当错误发生的时候,创建一个包含错误的信息的对象,Java停止运行,然后异常对象要求被一段代码thrown。就像事件一样,一个异常必须被送到一些地方处理。收到异常的代码要求catch这个异常。一个try子句可以有许多的包含不同参数类型的catch子句。Java用异常的类型来匹配相关的catch子句。如果没有try模块,Java把异常thrown抛给上面的另外一个层次,直到JVM打印error和退出。

同步:共享数据都会有同步的问题。Swing所有的事件活动都是单线程的。synchronized修饰符告诉Java需要锁定包含这个方法的对象。(原来这个功能有点像C++中的临界区,CriticalSection,但是synchronized是个类修饰符)同一时间一个对象只能有一个方法同步方法被执行。这就允许一个方法选择数据,然后把数据设置为一个状态。当这个方法结束,就释放lock。Java是提供语言级的锁定,这就意味着你不可能忘记解锁类。即使是异常和线程结束,Java会帮助你释放这个锁。

第三章 商业工具
JVM就是实现Java 运行时的系统。通常解释器本身是一个本地程序,为每个平台提供,然后引导其他用Java写的程序。Java编译器和IDEs通常都是直接用Java实现的。JVM执行所有Java的运行时活动。加载Java类文件,验证不受信的源类,执行编译了的字节码。它管理内存和系统资源。在实现动态编译方面,解释器作为一个特殊的编译器,把Java字节码变成本地机器指令。你可以使用Web浏览器或者appletviewer工具来运行applet。

06-9-22:
Running Java Application:
main方法必须有正确的方法签名。一个方法签名是一系列定义方法的信息。包括方法名字和参数,返回值,修饰符的类型和可见度。Java解释器持续运行直到main方法返回和任何它开始的线程结束。

系统属性:虽然Java可以读取宿主机器的环境变量,但是一般不鼓励程序配置。而改为Java允许任何系统属性被传递到程序,当JVM启动的时候。系统属性仅仅是名字和值对应的字符串对。你能够使用这些属性作为一个更加结构化的,可移植的选择到命令行参数和环境变量,来为你的程序提供基本的配置信息。

classpath:用来搜索Java的类文件。包括Java解释器和Java编译器都使用classpath,当搜索包和类的时候。classpath可以是一个目录或者jar文件。java也支持zip压缩文件,但是jar和zip是一种格式。jar是一种简单的文件,包含额外的文件,元数据,这些额外文件用来描述每个压缩包的内容。jar文件使用jdk的jar工具来创建。许多用来创建zip的工具都可以用来查看或者创建jar文件。jar文件可以把类和资源大包为一个单一的文件。Java运行时自动解压每个类从这个jar中。

Java launcher和其他的命令行工具知道怎样找核心类。你不需要包含这些类在你的classpath中。

为了找到其他的类,Java解释器按顺序查找classpath中的元素。查找的时候,把path和fully qualified class name结合在一起。如果没有指定classpath,那么表示classpath默认为当前目录(的确,像Patrick Niemeyer说的一样,我最开始学习java的时候,就是被classpath弄昏了的,当时因为没有看好java,自己也没有深入的追究classpath到底是什么意思,当时我们学校买的java2实用教程没有这么详细的给我们讲到底classpath用来干嘛,我们只知道,找到bin目录,然后把它加入到classpath环境变量中,然后你才能在命令行中使用java和javac等命令,你才可以运行java程序,其实老师指定给我们的教材其实应该是讲得详细一点最好,看不看是我们自己的事情,我们又不会有多余的钱再来买一本关于java的书吧,我还发现我们下一届的同学上Java课,都是一本很厚的英文原版书,我煞是羡慕。除了客观原因,当时我没有深入Java,还是有其他一系列的主观原因)

Javap:列出class文件的描述信息,你不必看源码,就可以知道这个class文件中的接口信息javap 类名(javap又是一个新的工具,第一次学习的时候,根本就没有提这些东西,这个东西好啊,类似于.net的对象浏览器,目前Java还没有开源,javap能够使我们清楚的了解类文件的结构信息)使用-c option还可以查看类的JVM指令(这个option巴适,可以看到JVM的指令,我发现这点.net的dotfuscater工具跟javap是相似的,虽然目前我还不晓得这些指令是表示啥子意思的,不过我还有一本关于java编译器的书,从字节码到JVM指令,是否可以做逆向工程啦)

Java编译器:javac完全是用java写的。javac允许每个文件一个公共类,坚持类名与文件名相同。如果类名和文件名不匹配,javac出错。一个文件可能包含许多的类,只要仅仅有一个是公有的类就行。你能够使用-d option把javac产生的class文件存放到指定的地方,但是这个指定的目录只是类层次的根目录,取决于这个类是否包含在一个包中,编译器自动创建中间层子文件夹。你不必列出你类中引用的类,只要他们在classpath中,并且是以源代码或者字节码的形式存在。Java编译器更加的智能,不像make工具。javac可以比较修改时间,然后决定是否重新编译他们。默认情况下,javac仅仅检查直接被其他源文件直接引用得源文件。这就意味着,如果你的最新的文件引用了一个过期的文件,可能不会被重新编译。你要强制javac便利整个对象,就要使用-depend option。但是这个技术仍然不能帮助你来保持过期的且没有被其他引用的类库或者他们的类集合。

jar文件:
java archive(jar)文件是java的套件。它是标准的,可移植的方式打包所有的java程序到一个压缩包或者是安装文件。jar文件可以携带一个或者更多的数字签名来测试它的完整性和可靠性。一个签名能够被挂到整个文件,或者挂到单个文件上。

java运行系统了解jar文件,所以能够直接从压缩包中加载类文件。

文件压缩:保存在jar文件中的item使用标准的zip进行压缩。类文件可以减少40%,文本文件比如html或者ascii可以压缩到原来的size的四分之一。

jar manifests:注意jar命令自动增加一个叫做meta-inf到我们的jar文件中,这里的文件描述了jar文件的内容。它总是包含至少一个文件manifest.mf.这个文件包含了一个打包列表和用户定义的属性.manifest是一个文本文件,包含了一系列的关键字和值.在1.2之后,manifest默认是空的文件,仅仅包含了一个jar版本信息.

使得jar文件可运行:除了从属性,你能够把许多的值加到manifest文件中.Main-Class允许你定义包含主main的类.如果你增加这句话,你就能够直接运行代码.

策略文件:
安全内建在语言中,是java新奇的地方.安全策略允许你编写基于文本的策略文件。这些策略文件告诉安全管理对于某些人哪些可以做哪些不可以做。

默认的安全管理:默认,没有安全管理被安装,当你启动一个java程序的时候。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值