java读书笔记

更新时间:2023-08-14 03:17:02 阅读量: IT计算机 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Java核心技术读书笔记

1. super不能指向一个对象,不即不代表当前类对象引用,也不代表超类对象引用,他只是一个调用超类方法

的一个关键字。如果子类没有显式的调用超类的构造器,则将自动地调用超类默认的构造器。

2. 一个对象变量可以引用多种实际类型的现象被称为多态。尤其是一个对象变量可以引用其子类的对象。在

运 行时能够自动地选择调用的适当方法的现象称为动态绑定。如果方法是private、static、final或者构造器,

那么编译器可以准确地知道应该调用哪个方法。我们将这种调用方式称为静态绑定。在覆盖一个方法时,

子类方法不能低于超类方法的可见性。

4. 如果将一个类声名为final,其方法将自动地成为final,而它的域则不一定是final的。

5. 强制类型转换规则:只能在继承层次内进行类型转换;在将超类转换成子类之前,应该使用instanceof方法进

行检查。

6. 抽象类:它有什么必要?它可以包括非抽象方法和具体数据,不包含抽象方法的类也可以声名为抽象类,

但它仍然不可以实例化。可以定义一个抽象类型的对象变量,但它只能引用非抽象子类的对象。

7. 数据封装原则之一,在本类做了任何修改不影响其他地方。

8. 4个访问修饰符的可见性:private只对本类可见;public对所有类可见;protected对本包及所有子类可见;默

认对本包可见。

9. Object类的equals方法设计讲究很多原则,他用于比较两个对象是否相等,是比较两个对象的内存地址是否

相等。若子类不覆盖此方法,相等性比较将也是比较两个变量是否引用同一快内存空间,这显然是没有任

何意义的,所以设计类时一般要覆盖掉Object类的equals方法。

10. hashCode方法:是由对象导出的一个没有规律的整型值,所以若x和y是两个不同对象,其散列码基本上不

会相等。Object的散列码值是对象的存储地址。若子类重写了Object的equals方法,也必须重写Object的

hashCode,因为两个对象相等,他们必须保证有相同的散列码。

11. toString()方法,用于返回表示对象状态值的字符串,Object中的toString()方法得到类名和散列码,很多方法

都覆盖了Object的toString方法,用于输出对自己有意义的结果

12. ArrayList是一个采用类型参数的泛型类。此功能在JDK5.0以后才出现。

13. 将基本数据类型如 int转换为包装类型如 Integer的构成叫打包,反过来叫拆包。在JDK5.0以前必须手工地

插入打包和拆包的代码,现在编译器可以自动的进行打包拆包动作。

14. JDK5.0以后支持参数个数可变的方法。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

15. 反射:这个久闻的词对我来说一直很神秘,今天拜读了这章内容,了解了一些概念,但仍然没有领会到

其中的原理,只听说spring的IOC就是基于这个原理而设计的。这里我只记录一些需要记忆性的概念、方

法,至于深层的原理,还得再来一遍了。

能够分析类能力的程序称为反射。可以利用反射机制:

a. 在运行时分析类的能力。

b. 在运行时查看对象,例如,编写一个toString方法供所有类使用。

c. 实现数组的操作代码。

d. 利用Method对象,使用一个叫“对象指针”的东西。

反射是一个功能强大但复杂的机制,它的主要使用对象是工具构造者,并不针对项目开发中的代码编写

者。

16. Class类:在程序运行期间,JAVA运行时系统始终为所有的对象维护一个被称为运行时的类型标志。这个

信息保存着每个对象所属的类足迹。虚拟机利用运行时信息选择相应的方法执行。可以通过专门的JAVA

类访问这些信息。保存这些信息的类被称为Class。虚拟机为每个类型管理着一个Class对象。

ng.Class类:

static Class forName(String className)返回类名为className的Class对象。 Object newInstance()返回一个该类的实例。

典型的应用在加载数据库驱动时,先创建一个驱动类的对象,再返回该类的实例。 Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();

17. 使用反射分析类的能力(检查类的结构):

在ng.reflect包中有三个类Field、Method、Constructor分别用语描述类的域、方法和构造器。公用的方

法有getName()--返回该条目的名字;getModifiers()返回一个整形数值,此数值用于判断该条目的修饰符。

Class类的getFields、getMethods、getConstructors方法将分别返回类支持的Public域、方法和构造器数组,其

中包括类的公有成员。Class类的getDeclareFields、getDeclareMethods、getDeclareConstructors方法将分别返回

类中声明的全部域、方法和构造器,其中包括私有域,但不包括超类中的条目。

JavaScript入门经典 1> Javascript与JScript有什么区别?

答:用一句话来说,JScript就是微软版本的javascript。javascript最初是由一种Netscape公司所开发的script语言。后来netscape把Javacript提交给ECMA进行标准化,ECMA通过了netscape的申请,并制定了官方的Javascript语言标准规格说明书,即ECMA-262,当然随着javascript的发展,ECMA-262也推出了Edition3,Edition4.....

而JScript就是微软根据ECMA标准,自己开发的一种脚本语言,由于它和Netscape

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

公司的javascript遵循相同的ECMA标准,所以两者很大程度上是互相兼容的。但JScript也提供了一些微软IE独有的特性和功能,所以只能运行在IE上。就我个人而言,我不一般不使用JScript提供的那些IE独有的特性,看似在编程的时候给你带来很大便捷,但兼容性和移植性的问题足以令人痛不欲生……

2>浏览器在加载HTML文件时,遇到javascript代码就会马上执行!!!!所以你不想马上执行的代码,你就应该写在一个函数里面,这样只有在你主动调用函数的时候,代码才会执行。

3>如果想判断一个变量是否已经被声明,或者说一个变量是否已经存在,不能使用

if(varname)...而要用if(window.varname)....如果varname没有被声明过的话,前者根本通不过编译。p.s. 但要注意,varname是bool类型的话,这种方法就不适用了…… 另外我今天发现只有在html文件中定义的变量,window.varname才有定义。在<script src=".."></script>引入的外部js文件中不能使用这种方法来判断。因为即使定义了,window.varname也是undefined,因为window对象本身就是指html页面所在的窗口。

4>javascript的语法非常自由灵活。比如,with语句,还有prototype对象更是神奇。利用prototype对象竟然可以扩展javascript内置对象或自定义对象的属性!! 天啊,我之前还没有见过这么灵活的语言。相对来说,我觉得C#就够灵活了,出现了很多C/C++中没有的语法特点。但即使是在C#中,也没有with,也没有类似于prototype的东西。prototype我倒是觉得没什么必要,但是对于with语句,我觉得很方便,可以使写出来的代码很简洁清晰,但不知道为什么,C#的作者不肯加上它们。呵呵,好像在MSDN上见过C# team里的人讨论这个问题,他们说加入with会使代码可读性下降,因为属性前面不一定跟着对象名。呵呵,我不这么认为,假如细细追究的话,c#里面的好多语法都有弊端。但我们中国没有自己的语言,必然是要受制于人的,人家认为with好就给你加上,人家认为不好就是不好,你想用也没有~ 呵呵,怒了,可是怒也没办法啊,我没能力写出来一个C#++啊…… 5>javascript内置对象的介绍省略;

6>DHTML DOM 与 W3C DOM:

这是两种不同的DOM(文件对象模型)。DHTML对象模型将浏览器和HTML文件的标签都对象化,以便javascript可以轻易地操纵浏览器和访问HTML标签的对象。DHTML DOM和W3C DOM的差异在于DHTML DOM是将整个HTML文件都对象化,每一个HTML标签都对应有标签对象,而且每一个对象都拥有不同的方法和属性。

相反,W3C DOM属于一种通用的文件浏览和访问机制。它将整份HTML或者XML文件视为一种阶层架构的树状结构,文件中的每一个标签都是一个树状结构的节点,提供通用的属性和方法对各个节点进行浏览和访问。IE从5.x版开始支持W3C DOM.

用我的话来说就是,DHTML DOM中没有明显的树状结构,无论爷爷节点还是孙子结点,使用document.all.爷爷,document.all.孙子,一下子就都出来了,不存在等级层次。相反,在

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

W3C中就不一样了,它提供的通用接口是firstChild()、lastChild()、parentNode()、nextSibling()、previousSibling()等等。

W3C DOM与DHTML DOM相比,还有一个很酷的本领,它不仅可以浏览文件的各个结点,W3C DOM还可以建立、删除、复制、交换和取代节点。简直太酷了~~~ 具体来说,W3C DOM提供的接口有,appendChild(),cloneNode(),createElement(),insertBefor(),removeNode()等等。到此为止,相信你也能感觉到W3C DOM要比DHTML DOM先进,DHTML DOM用起来方便,但没有通用性,而W3C DOM这一点做得非常好。

7>XHTML是什么?

首先要理解什么是XML。事实上,XHTML就是HTML 4.0x版以XML1.0语法重新制定的标签语法,所以肯定地说,XHTML文件首先是一份标准的XML文件,一切都要符合XML文件的格式。 XHTML文件比HTML文件的标签要求要严格得多,要求必须遵循XML文件的编写原则。几点注意事项是: a. 不可以省略结尾标签 b. 标签和属性都要使用小写 c.属性值要用引号括起来 属性使用id属性取代。

XHTML文件的扩展名要用.xhtml,不能再使用.html。

8>XML DOM,加载分析XML文件

在javascript程序中,可以使用微软IE内置的MSXML组件来建立XML DOM对象,如下所示: var xmlDom = new ActiveXObject("MSXML2.DOMDocument");

xmlDom.async="false";

xmlDom.load("hou.xml");

然后就可以使用XML DOM提供的接口来访问XML文件了。

J2EE项目开发实用案例

Java中的继承:

(1)具体继承性:来自一个超类的方法实现和成员变量的继承性(类与类之间的继承)

既允许多态性,又允许便利的实现(代码能够从一个超类中被继承)。涉及到实现和设计两种问题。而且最重要的是具体继承性是OO

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

语言中实现代码重用的强有力的方法。但是我们希望只把具体继承性看作一种实现方法,而非设计方法。

(2)接口继承性:(接口与类之间的继承) 允许多态性。涉及设计问题。 (3)抽象类:抽象类不是接口的代替物,它通常作为一个接口的实现中的一个便利步骤。不要用抽象类取代接口定义一个类型,这样往往会陷入Java缺少多具体继承的问题中。

4、ISP(接口分离原则)接口在保持简单时是最有价值的,因为开发人员将被迫扩展一个抽象或具体实现来避免编写过多的代码。接口分级结构要与类分级结构分开,以便一个特定的类只需要实现它所需要的准确接口。

5、Template Method Template Method就是具体继承性的典型应用。把控制工作流程的任务交给抽象超类,而由具体子类实现执行各步骤的具体方法,这也正是控制反转的体现(程序不依赖于实现,而是程序与实现要依赖于抽象)。实现这种模式的难点就是要鉴别出可能会在子类之间变化的那些方法。 Template Method在J2EE中非常有用,往往用它实现应用服务器和数据库的可移植性。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

注:(1)由于在接口中而不是类中定义类型通常会更好,因此Template Method常常用一种实现接口的策略。

(2)抽象超类的final方法和具体子类的protected方法可以减小出错的概率。

6、Strategy 与Template Method相比,Strategy更为复杂、更为灵活。它是一个在具体继承性和接口委托之间进行折衷的解决方案。(将基础算法骨架与具体算法抽象使用组合分离开来)

注:1、在以下情况中优先使用Strategy * 所有步骤都变化(不只是某些步骤) * 实现这些步骤的类需要一个独立的继承性分级结构(接口委托保证了这点)

* 当这些步骤的实现可能与其他类相关 * 当这些步骤的实现可能需要在运行时变化(委托可以处理这种情况)

* 当这些步骤的实现类很多 7、Callback Interface

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Callback是Strategy的特殊情况,Strategy使用属性注入(组合)来实现接口委托,而Callback是使用携带参数来实现接口委托。 往往使用Callback处理执行错误处理和资源的获得与释放、以及处理一些低级API的细节,使得应用代码跟关注于业务。缺点是语法不是很直观,代码可能难以理解和维护。回调接口非常简单时是使用Callback最有价值的时候。

8、Observer

SHQ . 联接列

对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。我们一起来看一个例子,假定有一个职工表(employee),对于一个职工的姓和名分成两列存放(FIRST_NAME和LAST_NAME),现在要查询一个叫比尔.克林顿(Bill Cliton)的职工。

下面是一个采用联接查询的SQL语句,

select * from employss

where

first_name||”||last_name = Beill Cliton ;

上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。

当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。 Select * from employee

where

first_name = Beill and last_name = Cliton ;

遇到下面这种情况又如何处理呢?如果一个变量(name)中存放着Bill Cliton这个员工的姓名,对于这种情况我们又如何避免全程遍历,使用索引呢?可以使用一个函数,将变量name

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

中的姓和名分开就可以了,但是有一点需要注意,这个函数是不能作用在索引列上。下面是SQL查询脚本:

select * from employee

where

first_name = SUBSTR( &&name ,1,INSTR( &&name , )-1)

and

last_name = SUBSTR( &&name ,INSTR( &&name , )+1)

3. 带通配符(%)的like语句

同样以上面的例子来看这种情况。目前的需求是这样的,要求在职工表中查询名字中包含cliton的人。可以采用如下的查询SQL语句:

select * from employee where last_name like %cliton% ;

这里由于通配符(%)在搜寻词首出现,所以Oracle系统不使用last_name的索引。在很多情况下可能无法避免这种情况,但是一定要心中有底,通配符如此使用会降低查询速度。然而当通配符出现在字符串其他位置时,优化器就能利用索引。在下面的查询中索引得到了使用: select * from employee where last_name like c% ;

4. Order by语句

ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。

仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式。

5. NOT

我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:

… where not (status = VALID )

如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT运算符包含在另外一个逻辑运算符中,这就是不等于(<>)运算符。换句话说,即使不在查询where子句中显式地加入NOT词,NOT仍在运算符中,见下例:

… where status <> INVALID ;

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

再看下面这个例子:

select * from employee where salary<>3000;

对这个查询,可以改写为不使用NOT:

select * from employee where salary<3000 or salary>3000;

虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。

6. IN和EXISTS

有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。

第一种格式是使用IN操作符:

… where column in(select * from … where …);

第二种格式是使用EXIST操作符:

… where exists (select X from …where …);

我相信绝大多数人会使用第一种格式,因为它比较容易编写,而实际上第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。 第二种格式中,子查询以 select X 开始。运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where语句中使用的列存在索引)。相对于IN子句来说,EXISTS使用相连子查询,构造起来要比IN子查询困难一些。

通过使用EXIST,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。 同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Visual Basic 6.0数据库开发指南读书笔记 Microsoft Visual 是 Microsoft Visual Basic 6.0 的后续版本,它是基于 .NET 框架重新设计的,您可以用它来轻松地创建用于 Microsoft Windows 32位操作系统和 Web 的下一代应用程序。使用 Visual ,可视化开发 Web 应用程序、Web 服务、Windows 应用程序和服务器端组件将变得轻而易举。此外,Visual 使用了 Windows 应用程序的 XCOPY 部署方案,使您不必再担心 DLL 版本问题。随着 Visual 的发布,“DLL 噩梦”将成为过去。

在设计 Visual 时,我们着眼于世界各地 Visual Basic 开发者的要求。Visual Basic 语言现在是真正的面向对象语言,并支持实现继承。窗体设计器支持可视化继承,并包含窗体自动调整大小、资源本地化和访问选项支持等新特性。现在的数据工具继续支持 XML 数据,并可以共同使用设计时数据绑定和断开数据。此外,Visual 是基于 .NET 框架直接创建的,因此可以使用所有的平台特性,并能够与其他 .NET 语言协同工作。 在发布这些功能的同时,我们对产品的几个方面作了修改。本文档介绍了从 Visual Basic 6.0 到 Visual 的一些变更,并解释了进行这些变更的原因。本文还介绍 Visual 升级向导的功能。它是作为产品的一部分提供的工具,可以帮助您将现有的应用程序升级为 Visual 版本。

有关从 Visual Basic 6.0 升级到 Visual 的其他信息,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual 》(英文)。此白皮书介绍了升级过程并提供了尽可能顺利升级的建设性意见。

语言

Variant

Visual Basic 6.0

Variant 是一种特殊的“通用”数据类型,可以包含除定长字符串之外的各类数据。Object 变量用作指向对象的指针。默认的数据类型为 Variant。

Visual

公共语言运行时 (CLR) 使用 Object 作为通用数据类型。Visual 没有继续使用 Variant 作为通用数据类型,而是选择采用 CLR 命名规则,以避免在跨语言开发时造成混乱。仅使用一种通用数据类型将简化类型系统。默认的数据类型为 Object。

升级向导

将 Variant 数据类型变为 Object,因此以下代码:

Dim x As Variant

升级后将变为:Dim x As Object

Integer 和 Long

Visual Basic 6.0

Long 变量存储为带有符号的 32 位数字,而 Integer 变量存储为 16 位数字。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Visual

Long 变量存储为带有符号的 64 位数字,Integer 变量存储为 32 位数字,而 Short 变量存储为 16 位数字。在 32 位系统中,32 位整数操作比 16 位和 64 位整数操作都要快。这意味着 Integer 将是最有效和最基本的数字类型。

由于部分 .NET 框架技术以现代的 32 位和 64 位技术为基础,因此根据新技术更新数据大小是明智之举。

升级向导

修改变量的类型,因此以下代码:

Dim x As IntegerDim y As Long

升级后将变为:

Dim x As ShortDim y As Integer

Currency

Visual Basic 6.0

Visual Basic 6.0 支持 Currency 数据类型。您不能将变量声明为 Decimal 类型(虽然变量可以具有子类型 Decimal)。

Currency 变量以整数格式存储为 64 位数字,以 10,000 为标度,以将数字表示为定点数,其小数点左边为 15 位,右边为 4 位。这种表示形式可以表示 -922,337,203,685,477.5808 至 922,337,203,685,477.5807 范围内的数字。

Decimal 变量存储为带有符号的 96 位整数,标度为 10 的不同乘幂。10 次幂的刻度因子指定了小数点右边的数字位数,其范围为 0 至 28。当指数为 0 时(无小数位数),最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。当指数为 28 时,最大值为 +/-7.9228162514264337593543950335

+/-0.0000000000000000000000000001。

Visual

Currency 数据类型的精度不够,无法避免四舍五入的误差,因此创建了 Decimal 这种数据类型。

升级向导

将 Currency 数据类型转换为 Decimal,因此以下代码:

Dim x As Currency

升级后将变为:

Dim x As Decimal

Date

Visual Basic 6.0

Date 变量在内部以 Double 格式存储,能够作为 Double 类型的变量操作。

Date 变量存储为 IEEE 64 位浮点数,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期和从 0:00:00 到 23:59:59 的时间。任何可识别的文字日期都可以指定为 Date 变量。 ,最小的非零值为

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

当其他数字类型转换为 Date 时,小数点左边的值表示日期信息,而小数点右边的值表示时间信息。午夜为 0,正午为 0.5。整个数值为负表示 1899 年 12 月 30 日之前的日期。

Visual

Date 在内部存储为 64 位整数,因此无法直接作为 Double 进行操作。.NET 框架提供了 ToOADate 和 FromOADate 函数以进行 Double 和 Date 之间的转换。将日期表示为整数形式可以简化并加速对日期的操作。

升级向导

升级工具并非能够检测到所有使用变量将 Date 存储为 Double 的情况,但它一般会在将 Double 指定为 Date 的位置插入适当的 ToOADate 或 FromOADate 方法。例如,以下代码:

Dim dbl As Double Dim dat As Date Dbl = dat

升级后将变为:

Dim dbl As Double Dim dat As Date Dbl = dat.ToOADate

定长字符串

Visual Basic 6.0

除类模块的 Public 变量之外,其他变量均可以声明为定长字符串。

Visual

CLR 第一版不支持定长字符串。在后续版本中将添加这一支持功能。

升级向导

在大多数情况下不会出现问题。假设为定长字符串表现方式,则以下代码:

Dim MyFixedLengthString As String * 100

升级后将变为:

Dim MyFixedLengthString As New VB6.FixedLengthString(100)

有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual 》(英文)。

Type

Visual Basic 6.0

Type 语句用于定义由用户定义的数据类型。

Visual

Type 和 User-Defined Type 这两个名称会引起混淆,因为类、枚举和接口也是可以由用户定义的类型。Type 和 User-Defined Type 是从 QuickBasic 遗留下来的,在 QuickBasic 中用户可以定义的类型只有结构和记录。CLR 使用 Type 这一名称广义地包含所有数据类型。 因此,在 Visual 中 Type 语句将变为 Structure。

升级向导

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

将 Type 语句变为 Structure,因此以下代码:

Type MyType MyVariable As Integer End Type

升级后将变为:

Structure MyType Dim MyVariable As Short End Structure

用户定义类型存储

Visual Basic 6.0

用户定义的数据类型可以包含某种数据类型、数组或先前定义的用户定义类型的一个或多个元素。在 Visual Basic 6.0 中,它们存储在连续的内存块中。

Visual

格式是最有效的。它可能位于一段连续的内存,也可能不。结构可以被标记为封送处理属性,以确保能够作为连续内存块传递到 COM 组件。

升级向导

在所有需要添加封送处理属性的位置,API 均标记有 TODO 注释。(属性不是自动添加的,只有将结构传递到 API 时才需要它们。)

True

Visual Basic 6.0

True 的值为 -1。

Visual

True 的值为 1。

鉴于语言的协同操作,需要一种适用于所有语言的一致表示法。

升级向导

如果将布尔值强制转换为非布尔值,代码将标记有升级警告。例如,以下代码:

Dim MyBoolean As BooleanDim MyInteger As Integer MyInteger = MyBoolean 升级后将变为:

Dim MyBoolean As BooleanDim MyInteger As Short ' UPGRADE_WARNING: Boolean MyBoolean is being converted into a numeric MyInteger = MyBoolean

Empty

Visual Basic 6.0

变量均初始化为 Empty,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,则自动转换为空字符串。

Visual

对象变量均初始化为 Nothing,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,将自动转换为空字符串。使用 Nothing 代替特殊的 Empty 值可以降低语言的复杂

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

性,语言协同操作性也更强。

升级向导

Null 和 Null 传播

Visual Basic 6.0

Null 值为 Variant 的子类型,表示变量不包含有效数据。Null 值通过表达式和函数“传播”。如果表达式的任一部分为 Null,则整个表达式为 Null。将 Null 作为参数传递给大多数函数时,这些函数也将返回 Null。

Visual

不支持 Null 传播。使用 对数据进行编程的模型用于在检索字段的值之前先检查字段的值是否为 Null。包含 null 的变量将作为 DBNull 类型的对象封送处理至 CLR。

Visual 处理 Null 时更加直接:字符串函数(例如 Left())总是返回字符串,与您的预期一样。

升级向导

Null 值和 IsNull 函数标记有升级警告注释。例如,以下代码:

If x Is Null Then MsgBox "Null"

升级后将变为:

' UPGRADE_WARNING: Use of IsNull() detected If IsDBNull(x) Then MsgBox "Null"

Def<Type>

Visual Basic 6.0

DefBool、DefByte、DefInt、DefLng、DefCur、DefSng、DefDbl、DefDec、DefDate、DefStr、DefObj 和 DefVar 语句用于在模块级设置变量、参数和过程返回类型(以指定字符开始)的默认数据类型。

Visual

避免使用隐式类型声明,提高了代码的可读性和可靠性。

升级向导

将变量类型的显式声明插入代码。例如,以下代码:

DefStr a-z

Sub MySub

s = "Hello"

End Sub

升级后将变为:

Sub MySub

Dim s As String

s = "Hello"

End Sub

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

块内的局部变量

Visual Basic 6.0

从包含声明的行至过程结束的范围内,局部变量均可见。

Visual

Visual 支持变量的块范围。这意味着从包含声明的行开始,至出现声明的块结束,局部变量均可见。例如:

Sub Test(x As Integer)

If x < 0 Then

Dim y As Integer = - x

'...

Else

'...

End If

End Sub

以上示例中的变量 y 仅在声明该变量的块中可用;更确切地说,它仅在其声明至 Else 语句之间可用。如果需要在整个过程中使用变量,则必须在 If/Else/End If 控制结构之外声明该变量。 变量的块范围是许多结构语言共有的功能。过程局部变量允许定义过程内部变量,从而对结构化编程提供支持,与此类似,块级别变量允许定义代码块内部变量,从而对结构化分解提供支持。

升级向导

如果变量在块内声明,变量将自动移至模块级范围。例如,以下代码:

If x =1 Then

Dim y As Integer

End If

升级后将变为:

Dim y As Integer

If x =1 Then

End If

新的自动重新实例化

Visual Basic 6.0

窗体的类变量声明 Dim x As New <classname>将导致编译器每次引用 x 时生成代码。此代码检查 x 是否为 Nothing;如果是 Nothing,则创建类的新实例。例如,以下代码: Dim x As New MyClass

'...

Call x.MyMethod()

等同于:

Dim x As MyClass

'...

If x Is Nothing Then

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Set x = New MyClass

End If

Call x.MyMethod()

即使变量已经设置为 Nothing,在下一次调用时该变量仍将重新实例化。

Visual

窗体的变量声明 Dim x As New <classname>等同于 Dim x As <classname> = New <classname>。引用通过此语法声明的变量不会生成特殊代码。

Visual 声明 As New 比 Visual Basic 6.0 中的同一声明更加有效。大多数对这类变量的引用不需要额外的开销。而且,Visual Basic 6.0 的“自动实例化”行为对于发现它的许多编程人员来说非常古怪。

升级向导

这极少会成为问题。但是,如果代码尝试使用已设置为 Nothing 的类,将导致运行时异常。该异常很容易检测到。然后,可以方便地修改代码以实例化类的新版本,如下例所示:

Dim x As New MyClass

x = Nothing

x = New MyClass

对象终结

Visual Basic 6.0

COM 引用计数机制用于垃圾回收对象实例。如果对象不在循环中,当对象不再使用,引用计数会立即检测到此情况,并且运行终结代码。

Visual

跟踪垃圾回收器从存储在堆栈变量、模块变量和共享变量中的可及引用开始,将对象过一遍。此跟踪进程作为后台任务运行,因此在指向对象的最后一个引用结束和添加新引用之间有一个不定的时间段。

在某些情况下,客户端确实需要能够强制某一对象释放资源。CLR 规定这样的对象应当实现 IDisposable 接口,这就提供了 Dispose 方法。当客户端结束对具有 Dispose 方法的对象的使用时,它可以显式调用 Dispose 方法以释放其资源。例如,包装数据库连接的对象应当公开 Dispose 方法。

跟踪垃圾回收器能够正确释放引用循环中的对象。此外,跟踪垃圾回收器的性能比引用计数要好得多。

升级向导

在大多数情况下,这一改变不会导致问题。如果您的代码中使用了资源句柄开放(连接或文件句柄),则必须显式关闭此句柄。此问题易于检测并会导致运行时错误。

数组

Visual Basic 6.0

数组可以由任何整数数字的上下限限定。如果在声明中未指定下限,将使用 Option Base 语

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

句确定默认下限。

Visual

为了与其他语言协同操作,所有数组的下限均必须为零。这样就不再需要 Option Base 语句。

升级向导

ReDim

Visual Basic 6.0

Visual Basic 6.0 中的固定大小数组和不定大小数组有所区别。固定大小数组通过 Dim 语句声明,在此语句包括此声明中的数组界限。动态数组在 Dim 语句中声明,不指定界限信息。在使用动态数组之前,需要通过 ReDim 语句重新标注动态数组。在 Visual Basic 6.0 中,ReDim 语句提供了在单个语句中为动态数组声明和分配空间的快捷方法。ReDim 语句是 Visual Basic 6.0 中唯一能够同时声明和初始化变量的语句。

Visual

ReDim 语句仅用于为数组分配或重新分配空间,而不能用于重新分配数组。这是因为 Visual 中的所有数组均是动态的,在 Visual 中 Dim 语句既可用于声明动态数组,又可用于初始化动态数组。由于所有变量声明均可声明变量并指定变量的初始值,使用 ReDim 同时声明和初始化变量就变得多余和不必要了。只需要 Dim 语句声明变量使语言更加简单、一致性更高。

升级向导

如果 ReDim() 用于声明数组,在代码中会自动插入相应的声明。但是,最好的方法是您自己先在数组中插入 Dim 语句,因为使用 ReDim 声明数组需要升级工具来推断正确的声明。使用 ReDim 也产生了不便处理的代码,因为数组在两处进行了同一声明。

赋值

Visual Basic 6.0

赋值形式有两种:Let 赋值(默认)和 Set 赋值。用 Set 语句为 cn 赋值。

Visual

仅有一种赋值形式。x = y 意味着将变量或属性 y 的值赋给变量或属性 x。对象类型变量的值是对对象实例的引用,因此如果 x 和 y 是引用类型的变量,将执行引用赋值。这种单一形式的赋值减少了语言的复杂性,并使代码可读性更强。

升级向导

删除 Set 和 Let 语句。解析强类型对象的默认属性,并将属性显式添加到代码中。

有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual 》(英文)。

And、Or、Xor 和 Not

Visual Basic 6.0

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

And、Or、Xor 和 Not 运算符可以执行逻辑运算或位运算(取决于表达式)。

Visual

And、Or 和 Xor 仅适用于布尔型。对于 And 和 Or 运算符,如果第一个运算数的值足以确定运算符的结果,则运算符将简化计算。新的运算符 BitOr、BitAnd 和 BitXor 均用于位逻辑运算。Bitxxx 运算符不具有简化作用。

升级向导

如果 And/Or 语句是非布尔型或者包含函数、方法或属性,此语句将升级为使用兼容性函数,与 Visual Basic 6.0 中的表现形式相同。如果 And/Or 语句是布尔型,此语句将升级为使用本地 Visual 语句。

有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual 》(英文)。

运算符优先级

Visual Basic 6.0

逻辑和位的 And、Or、Xor 和 Not 运算符的优先级高于比较运算符。

Visual

And、Or、Xor 和 Not 运算符的优先级低于比较运算符,因此 a > b And a < c 将被认为是 (a > b) And (a < c)。新的 BitAnd、BitOr 和 BitXor 运算符的优先级高于比较运算符,因此 a BitAnd &HFFFF <> 0 将被认为是 ((a BitAnd &HFFFF) <> 0)。

由于 BitAnd、BitOr 和 BitNot 运算符可以返回数值结果,因此其优先级高于关系运算符,这样,就允许这三个运算符返回的结果与其他值进行比较。

升级向导

由升级向导处理。有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual 》(英文)。

调用过程

Visual Basic 6.0

支持两种类型的过程调用:一种使用 Call 语句,要求使用括号括住参数列表;另一种不使用 Call 语句,不能使用括号来括住参数列表。

在 Visual Basic 6.0 中的一种常见情况是,开发者调用的过程不使用关键字,而又在参数列表外使用括号。幸运的是,当有一个以上的参数时,编译器会将其作为语法错误检测出来。但是,当仅有一个参数时,单一参数外的括号会将参数变量传递为 ByVal 而不是 ByRef。这会导致难以找到的小错误。

Visual

在所有情况下参数列表均需要使用括号。

升级向导

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

为没有使用括号的过程调用插入括号。

静态过程

Visual Basic 6.0

通过 Static 关键字可以声明过程,此关键字表明在调用之间保留过程的局部变量。

Visual

在过程中不支持 Static 关键字,并且所有的静态局部变量均需通过 Static 语句显式声明。需要将过程中的所有变量均声明为静态的情况很少。删除此功能简化了语言,并且提高了可读性,因为局部变量总是位于堆栈中,除非已显式声明为 Static。

升级向导

如果过程标记为 Static,则所有的局部变量均变为 Static。

参数的 ByVal/ByRef 默认值

Visual Basic 6.0

参数未指定其默认值为 ByVal 或 ByRef 时,其默认值为 ByRef。

Visual

<参数未指定其默认值为 ByVal 或 ByRef 时,其默认值为 ByVal。

将参数默认值指定为 ByVal 而不指定为 ByRef,可以避免过程错误地修改由调用方传递的变量。这也使得默认的调用规则与赋值一致,以便参数有效地绑定至表达式(通过表达式赋值为正式参数)。请用户注意避免由 Visual Basic 6.0 升级到 Visual 带来的混乱。如果用户输入的参数声明未显式指定其默认值为 ByVal 或 ByRef,IDE 将为其自动添加 ByVal 关键字。

升级向导

为没有指定 ByVal 或 ByRef 为默认值的参数添加 ByRef。

IsMissing 参数和可选参数

Visual Basic 6.0

没有默认值的可选 Variant 参数将被初始化为特殊的错误代码,此错误代码可以由 IsMissing 函数检测出来。

Visual

在 Visual 中要求所有的可选参数均指定默认值。这样可以减少语言中特殊值的数量,从而简化语言。

升级向导

IsMissing 函数由 IsNothing 函数代替,并且标记有升级警告注释。

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

ParamArray 参数

Visual Basic 6.0

当变量传递给 ParamArray 参数时,可以通过被调用的函数修改。不支持 ByVal ParamArray 元素。

Visual

当变量传递给 ParamArray 参数时,不能通过被调用的函数修改。不支持 ByRef ParamArray 元素。

ParamArray 参数最常见的情况是不修改传递给此参数的变量。不支持 ByRef ParamArray 参数简化了 ParamArray 调用规则,因为 ParamArray 参数将被指定为正常数组。这样,ParamArray 参数可以扩展到任何元素类型,同时需要 ParamArray 参数的函数均可通过数组(而不是参数列表)直接调用。

升级向导

过程的 ParamArray 参数标记有升级警告。例如,以下代码:

Function MyFunction(ParamArray p() As Variant)

'...

End Function

升级后将变为:

' UPGRADE_WARNING: ParamArray p was changed from ByRef to ByVal

Function MyFunction(ByVal ParamArray p() As Object)

'...

End Function

声明中的 As Any 参数

Visual Basic 6.0

本地 API 的参数可以声明为 As Any,这样对本地 API 的调用就可以传递任何数据类型。通过这一方法,可以调用参数支持两种或多种数据类型的 API。

Visual

重载的 Declare 语句可以定义为允许调用带有两种或多种数据类型的本地 API。例如,以下 Declare 语句:

Private Declare Function GetPrivateProfileString _

Lib "kernel32" Alias "GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As Any, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

可以由两个 Declare 版本代替,一个接受 Long,一个接受字符串。

Overloads Private Declare Function GetPrivateProfileStringKey _

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

Lib "kernel32" Alias "GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As String, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

Overloads Private Declare Function GetPrivateProfileStringNullKey _

Lib "kernel32" Alias"GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As Long, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

这提高了类型的安全性,并减少了导致程序失败的小毛病。这一情况的存在是因为编译器不允许通过没有显式定义的数据类型来调用 API。

升级向导

使用 As Any 参数的 Declare 语句标记有升级警告。

Implements

Visual Basic 6.0

Implements 语句指定在其出现的类模块中实现的接口或类。

Visual

Visual 中的 Implements 与 Visual Basic 6.0 中的 Implements 有两个本质区别:

在 Implements 语句中不能指定类。

每一种实现方法均要求在方法声明语句的结束处使用 Implements 子句。该子句指定其实现的接口方法。

由于要求每一种实现接口方法的方法均使用 Implements 子句,所以提高了代码的可读性;在阅读使用方法来实现接口方法的的代码时,这一优点显而易见。

升级向导

如果类 a 实现类 b,则将为类 b 声明接口,且类 a 将变为实现类 b 的接口:

Interface _b

Function MyFunction() As String

End Interface

Class a

Implements _b

Function b_MyFunction() As String Implements _b.MyFunction

End Function

本文来源:https://www.bwwdw.com/article/sjdj.html

Top