| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 23347 人关注过本帖, 1 人收藏
标题:初学者请进!
取消只看楼主 加入收藏
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏(1)
 问题点数:0 回复次数:14 
初学者请进!
1、java 2 SDK 的版本分类: J2ME:(Java 2, Micro Edition)一种以广泛的消费性产品为目的的高度优化的Java运行环境,包括讯呼机、移动电话、可视电话、数字机顶盒等... 它是致力于消费产品和嵌入式设备的开发人员的最佳选择。 J2SE:(Java 2, Standard Edition)是SUN公司针对桌面开发以及低端商务计算解决方案而开发的版本。 J2EE:(Java 2, Enterprise Edition)是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE的基础是J2SE,J2EE不仅巩固了标准版中的许多优点,同时还提供了对EJB、Servlets、JSP以及XML技术的全面支持。 2、Java开发环境: Java是面向对象的编成语言,JDK作为其开发包。可以在Web上开发相关的Web应用;也可以开发各种类型的桌面程序。前者称为小程序Applet;后者称为应用程序Application。 Java开发工具包JDK(Java Development Kit)是编写Java程序的基础,它集成了编译Java源程序的编译器、运行Java类文件的解释器等必备工具。 3、获得JDK 目前SUN公司发布的JDK版本最高为1.5,所对应的平台有LInux、Solaris和Windows等等,下面的链接是JDK1.4.2的下载页面: http://java.sun.com/j2se/1.4.2/download.html 点击Download J2SE SDK,接受协议并下载 Windows Offline Installation, Multi-language 即可,官方服务器有点慢,多等一会儿吧。 4、配置Java开发环境 首先,安装。假设在D:\jdk14,不多说了。 其次,配置PATH环境变量。 1.对于Windows 95/98: 打开C:\的AOTUEXEC.BAT文件,找到PATH并在其最后加上 “;d:\jdk14\bin”。如果没有PATH,则加上“PATH d:\jdk14\bin;.”。重起后即可。 2.对于Windows NT/2000/XP: “我的电脑”->“属性”->“高级”->“环境变量”->找到Path-> 在最后加入“;d:\jdk14\bin”。如果没有,则“新建”PATH,其值为:“d:\jdk14\bin”。 检验配置是否正确:进入DOS命令提示符,在任意目录输入“javac”并回车,如果出现该命令的使用方法(usage ...)。 恭喜你!我们可以进入Java的编程世界了。 5、源程序的编译与运行 JDK的编译与运行需要在DOS命令提示符下使用。 编译器(javac.exe): 格式:javac [参数] 源程序 如:编译当前目录下Hello.java文件,并且把生成的类文件也放到当前目录 javac Hello.java 通常情况下,如果 CLASSPATH 设置正确,我们只需要使用不带参数的 javac 即可很好的编译 Java 程序,但是,为了方便以见,这里还是要介绍一些参数: -classpath <path> 如果编译时需要用到的 Java 类文件不在 CLASSPATH 指定的路径中,编译时可以指定 -classpath 参数指定可能用到类所在的目录。如 (假设 Java 运行类放在 d:\javacode 目录下): javac -classpath d:\javacode Hello.java -d <directory> 使用 -d 参数可以指定编译生成的 .class 文件输入到哪一个目录。通常情况下,javac 把生成的 .class 文件放在 .java 文件所在的目录中。如果使用 -d 参数,则可以指定 javac 将生成的 .class 文件入在其它目录中,如下例将生成的 HelloJava.class 输出到 d:\myclass 中 javac -d :\myclass HelloJava.java 常用的 javac 参数就介绍这两个。如果你需要了解其它参数的用法和作用,可以运行不带任何参数的 javac。它将打印出 javac 的用法文档。 解释器(java.exe): 格式:java [参数] 类名 [程序参数] 如果运行当前目录中Hello类:java Hello 即可,而不是java Hello.class -classpath <path> 如果编译时需要用到的 Java 类文件不在 CLASSPATH 指定的路径中,编译时可以指定 -classpath 参数指定可能用到类所在的目录。如 (假设 Java 运行类放在 d:\javacode 目录下): java -classpath d:\javacode Hello.java 如果你需要了解其它参数的用法和作用,可以运行不带任何参数的 java。它将打印出 java 的用法文档。 6、关于CLASSPATH环境变量 它是用来设置“类路径”的,提供给JVM的类装载器到哪里寻找第三方提供的类和用户定义的类。它的配置方法和PATH环境变量的方法一样,只是该成CLASSPATH。 例如:在d:\javacode目录写程序,那么,就可以把CLASSPATH设置成“.;d:\javacode”,以后,无论在哪个目录下都可以运行自己所写的类了。 有的朋友运行程序时,出现: Exception in thread "main" java.lang.NoClassDefFoundError: 一般就是JVM没有找到所使用的类。 7、关于JRE JRE 是Java运行环境 (Java Runtime Enviroment) 的缩写。它是JDK的基础,在安装JDK时就已经安装了它。如果只想运行Java程序,而不编译Java程序的话,安装JRE就足够了。 8、关于Java方面的书 买书要慎重。现在市面上的关于Java的书已经很多了, 我推荐一些: 初级读物: 《21天学通Java2第三版》 《Java 2编程详解》 《Java 2从入门到精通》 高级读物: 《Thinking in Java》 《java与模式》 …… 作为入门Java来说,主要是学习“面向对象的概念”和“Java编程的思维方式”,至于类的使用可以查看Java文档资料。 9、Sun的资料 如果English说得过去,可以看Sun的Java文档,那里有每个类的详细说明。 http://java.sun.com/j2se/1.4.2/download.html 中的J2SE 1.4.2 Documentation 同时,Sun还提供了Java从初级到高级的一系列“书籍”: 1、The Java Tutorial Java指南,讲得很具体。 2、The JFC Swing Tutorial, Second Edition: A Guide to Constructing   GUIs 3、The Java Tutorial Continued: The Rest of the JDK 可以在http://java.sun.com/docs/books/tutorial/里在线阅读,也可以下载(就在右边)。 10、开发Java的常用工具 1. 记事本+JDK:原始社会,不可思议的组合。 2. Jcreator+JDK:小巧伶俐的组合,提供自动补全功能,强力推荐。如果安装Jcreator后无法编译程序,就手动配置一下[Configure]-->[Options]-->[JDK Profiles]-->[New]选择JDK的安装目录。要使用自己的类,可以使用[Edit...]功能在已有的JDK中添加类,其功能类似设置CLASSPATH。(其中add Path是添加路径、add Archive来添加一个.jar的文件) 3. netBeans:Sun提供的IDE 环境,要求配置很高,反正我的机器跑得很慢。 4. Jbuilder:地球人都知道。 5. Eclipse:可以通过插件实现意想不到的功能。
搜索更多相关主题的帖子: 可视电话 移动电话 运行环境 机顶盒 
2005-01-09 12:40
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 

基础: 第一,谈谈final, finally, finalize的区别。

final

修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally

再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally块(如果有的话)。

finalize

方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

第三,Static Nested Class Inner Class的不同,说得越多越好(面试题有的很笼统)

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

第四,&&&的区别。

&是位运算符。&&是布尔逻辑运算符。

第五,HashMapHashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

第六,Collection Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:

assert(a > 0); // throws an AssertionError if a <= 0

断言可以有两种形式:

assert Expression1 ;

assert Expression1 : Expression2 ;

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

javac -source 1.4 Test.java

要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。

要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

第八,GC是什么? 为什么要有GC? (基础)

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

第九,String s = new String("xyz");创建了几个String Object?

两个对象,一个是“xyx,一个是指向“xyx”的引用对象s

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)返回(long12Math.round(-11.5)返回(long-11;

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1;有错,s1short型,s1+1int,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) short s1 = 1; s1 += 1正确。


〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-01-25 09:48
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 

第十二,sleep() wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

第十三,Java有没有goto?

Gotojava中的保留字,现在没有在java中使用。

第十四,数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有有length()这个方法。

第十五,OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

第十七,给我一个你最常见到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

第十八,error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

第十九,List, Set, Map是否继承自Collection接口?

List,Set是

Map不是

第二十,abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

第二十三,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

第二十四,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

第二十五,是否可以继承String类?

String类是final类故不可以继承。

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

有C背景的程序员特别喜欢问这种问题。

2 << 3

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

第三十二,编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  

  public static Singleton getInstance() {

    return instance;   

   }

}

第二种形式:

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     

  //使用时生成实例,提高了效率!

  if (instance==null)

    instance=new Singleton();

return instance; }

}

其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些


〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-01-25 09:52
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 

学习J2SE过程中的30个基本概念

前言: 在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念. Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载计算机的开发.Java于其他语言所不同的是程序运行时提供了平台的独立性,称许可以在windows,solaris,linux其他操作系统上使用完全相同的代码.Java的语法与C++语法类似,C++/C程序员很容易掌握,而且Java是完全的彻底的面向对象的,其中提出了很好的GC(Garbage Collector)垃圾处理机制,防止内存溢出. Java的白皮书为我们提出了Java语言的11个关键特性. (1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb. (2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet. (3)O面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型. (4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型 (5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好. (6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行. (7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好. (8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一 (9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的.

基本概念: 1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率. 2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance) 3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field) 4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍. 5.对象的3个主要特性 behavior---说明这个对象能做什么. state---当对象施加方法时对象的反映. identity---与其他相似行为对象的区分标志. 每个对象有唯一的indentity 而这3者之间相互影响. 6.类之间的关系: use-a :依赖关系 has-a :聚合关系 is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中) 7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化. 例:Data类的构造器叫Data new Data()---构造一个新对象,且初始化当前时间. Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用. 构造器特点:构造器可以有0个,一个或多个参数 构造器和类有相同的名字 一个类可以有多个构造器 构造器没有返回值 构造器总是和new运算符一起使用. 8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法. 9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内. 10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段. 11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类). 12.多态:在java中,对象变量是多态的.而java中不支持多重继承. 13.动态绑定:调用对象方法的机制. (1)编译器检查对象声明的类型和方法名. (2)编译器检查方法调用的参数类型. (3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法. (4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本. (5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码. 14.final类:为防止他人从你的类上派生新类,此类是不可扩展的. 15.动态调用比静态调用花费的时间要长, 16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract 例: public abstract string getDescripition 17.Java中的每一个类都是从Object类扩展而来的. 18.object类中的equal和toString方法. equal用于测试一个对象是否同另一个对象相等. toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示. (toString 方法是一个很重要的方法) 19.通用编程:任何类类型的所有值都可以同object类性的变量来代替. 20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小. 21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类. 22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具. 能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大. 1.在运行时分析类的能力. 2.在运行时探察类的对象. 3.实现通用数组操纵代码. 4.提供方法对象. 而此机制主要针对是工具者而不是应用及程序. 反射机制中的最重要的部分是允许你检查类的结构.用到的API有: java.lang.reflect.Field 返回字段. java.reflect.Method 返回方法. java.lang.reflect.Constructor 返回参数. 方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案. 23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface. 24.接口不是一个类,而是对符合接口要求的类的一套规范. 若实现一个接口需要2个步骤: 1.声明类需要实现的指定接口. 2.提供接口中的所有方法的定义. 声明一个类实现一个接口需要使用implements 关键字 class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口. 25.一个类只有一个超类,但一个类能实现多个接口.Java中的一个重要接口 Cloneable 26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法. 例:ActionListener 接口监听. 类似的API有:java.swing.JOptionPane java.swing.Timer java.awt.Tookit 27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它. 28.内部类:一个内部类的定义是定义在另一个内部的类 原因是:1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据 2.对于同一个包中的其他类来说,内部类能够隐藏起来. 3.匿名内部类可以很方便的定义回调. 4.使用内部类可以非常方便的编写事件驱动程序. 29.代理类(proxy):1.指定接口要求所有代码 2.object类定义的所有的方法(toString equals) 30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于 Unicode编码中的字符,布尔型.


〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-04 12:35
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
下面这些是整理大家的发言因为这些比较基础也很常见所以先整理出来希望新人来后查看,如果觉得这些有错误的地方请留言,我会修改这个帖子,第一次发布可能有很多不好的地方,希望大家给予帮助,谢谢拉

1.小弟我是个新手,用java编译时经常遇见一些看不懂的错误信息,谁可以告诉我该怎么办啊..谢谢了.... ? 答:碰到不懂的出错消息,就贴上来。 2.那位大侠能介绍一两本对Java初学者来说值得一看的书?? 答:Java大学教程,thinking in java,Java How to Program,Java核心技术等 3.请问高手,从哪里可以下载到比较好用的J2EE的开发环境 答:jboss www.jboss.org 3.*版本 4.* 4.Java里面如何将字符串转化为数字? 答:int temp=Integer.parseInt("12345");这样就ok了。 5.帮帮忙看我的这个applet为什么不能正常显示? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MathFloorTest extends JApplet implements ActionListener{ JLabel promptLabel,infoLabel; JTextField inputField,infoField; public void init(){ Container container = getContentPane(); container.setLayout(new FlowLayout()); promptLabel = new JLabel("Enter the number :"); inputField = new JTextField(10); inputField.addActionListener(this); container.add(promptLabel); container.add(inputField); infoLabel = new JLabel("The int that closed to number is :"); infoField = new JTextField(10); infoField.setEditable(false); container.add(promptLabel); container.add(inputField); } public void actionPerformed(ActionEvent actionEvent){ String numberStr = inputField.getText(); double number = Double.parseDouble(numberStr); int z = closedToNumber(number); infoField.setText(Integer.toString(z)); } public int closedToNumber(double x){ //int y = Double.valueOf(Math.floor(x + 0.5)).intValue(); int y = new Double(Math.floor(x + 0.5)).intValue(); return y; } } 运行这个applet只能显示 promptLabel和inputField,infoLabel和infoField却不能显示,请帮忙指出错误,先谢过了! 答: package demo; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MathFloorTest extends JApplet implements ActionListener { JLabel promptLabel,infoLabel; JTextField inputField,infoField; public void init() { Container container = getContentPane(); infoLabel = new JLabel("The int that closed to number is :"); promptLabel = new JLabel("Enter the number :"); inputField = new JTextField(10); infoField = new JTextField(10); container.setLayout(new FlowLayout()); inputField.addActionListener(this); infoField.setEditable(false); container.add(promptLabel); container.add(inputField); container.add(infoLabel); container.add(infoField); } public void actionPerformed(ActionEvent actionEvent) { String numberStr = inputField.getText(); double number = Double.parseDouble(numberStr); int z = closedToNumber(number); infoField.setText(Integer.toString(z)); } public int closedToNumber(double x) { //int y = Double.valueOf(Math.floor(x + 0.5)).intValue(); int y = new Double(Math.floor(x + 0.5)).intValue(); return y; } } 6.安装了j2ee1.4.2, javac可以编译源代码,但用java命令执行时提示以下错误: Error: could not open `C:\Program Files\Java\j2re1.4.1_02\lib\i386\jvm.cfg' 但是,用Jcreator可以运行。 答:不是XP对JAVA的支持问题,而是安装了JBuilder留下的一个问题!! 解决办法:注册表->HKEY_LOCAL_MACHINE->SOFTWARE\JAVASOFT\ 子目录下所有的JavaHome键值从JBuilder目录改到安装的JDK目录下即可。 7.建立一个简单的EJB来了解他的过程: 首先让我们来看一下,开发框架 这是一个非常简单的框架(别笑啊,简单也是框架啊!) servlet通过调用接口来访问实现了该接口的访问代理,访问代理与EJB进行了绑定 通过访问代理来访问EJB(类似与WebSphere的AccessBean的作用) 然后就建立工程吧,并配置服务器到开发环境(具体配置就不说了,很简单) 建立一个Bean类: package demo; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.CreateException; public class HelloBean implements SessionBean { SessionContext sessionContext; /*这是默认继承来的一些方法,用来创建,删除,激活,钝化用的 你要在这四个阶段内进行操作的话,可以在这里面写代码或间 接或直接的调用方法,来完成生命周期. */ public void ejbCreate() throws CreateException { //创建 } public void ejbRemove() { //删除 } public void ejbActivate() { //激活 } public void ejbPassivate() { //钝化 } /*用来设置会话上下文的*/ public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } /*唯一的业务方法*/ public String helloWord() { return "hello world"; } } 建立远程访问接口: package demo; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Hello extends EJBObject { /*用来给客户端调用的远程方法,所以要抛远程异常(rmi的原因)*/ public String helloWord() throws RemoteException; } 建立Home接口: package demo; import javax.ejb.EJBHome; import javax.ejb.CreateException; import java.rmi.RemoteException; public interface HelloHome extends EJBHome { /*用来创建Hello这个远程对象的,所以当然要抛创建异常和远程异常*/ public Hello create() throws CreateException, RemoteException; } 编写ejb-jar.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <display-name>EJBModule</display-name> <enterprise-beans> <session> <display-name>Hello</display-name> .........显示名字 <ejb-name>Hello</ejb-name> .........ejb名字 <home>demo.HelloHome</home> .........home接口的完整路径名称 <remote>demo.Hello</remote> .........远程接口的完整路径名称 <ejb-class>demo.HelloBean</ejb-class> .........ejb类的完整路径名称 <session-type>Stateless</session-type> .........会话类型:无会话 <transaction-type>Container</transaction-type> .........容器管理的(也可以有bean来管理) </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Hello</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> 编写weblogic-ejb-jar.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"> <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>Hello</ejb-name> .......ejb的名字 <jndi-name>Hello</jndi-name> .......jndi名字(很重要的靠他来找EJB) </weblogic-enterprise-bean> </weblogic-ejb-jar> 编写一个接口用来访问代理: package demo; public interface IHello { /*给前台用的接口*/ public String helloWorld(); } 编写访问代理: package demo; import javax.naming.Context; import javax.rmi.PortableRemoteObject; import java.util.Properties; import javax.naming.InitialContext; import javax.ejb.CreateException; import java.rmi.RemoteException; /*用来访问后台的访问代理*/ public class HelloImp implements IHello { private HelloHome helloHome = null; private String str = new String(""); /*通过构造方法来完成一些初始化操作*/ public HelloImp() { inint(); } /*初始化的方法*/ public void inint() { try { Context context = getInitialContext(); //获得上下文 Object ref = context.lookup("Hello"); //定位EJB /*获得Home对象*/ helloHome = (HelloHome) PortableRemoteObject.narrow(ref, HelloHome.class); } catch (Exception ex) { System.out.println("发生异常在:inint()类型为:" + ex); ex.printStackTrace(); } } private Context getInitialContext() throws Exception { String url = "t3://localhost:7001"; //访问地址 String user = null; //用户名 String password = null; //密码 Properties properties = null; //属性 try { properties = new Properties(); /*设置属性从上下文中获得的绑定值,地址等属性*/ properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); properties.put(Context.PROVIDER_URL, url); if (user != null) { properties.put(Context.SECURITY_PRINCIPAL, user); properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password); } return new InitialContext(properties); } catch (Exception e) { System.out.println("发生异常的位置:getInitialContext()异常类型为:" + e); throw e; } } public HelloHome getHome() { return helloHome; //返回helloHome对象 } public String helloWorld() { try { /*调用ejb中的唯一业务方法helloWord()方法来完成业务*/ str = helloHome.create().helloWord(); return str; } catch (CreateException ex) { System.out.println("创建对象时发生异常"); ex.printStackTrace(); } catch (RemoteException ex) { System.out.println("访问远程调用时发生异常"); ex.printStackTrace(); } catch (Exception ex) { System.out.println("其他错误"); } return str; } } 编写测试servlet用来访问测试: package demo; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class TestServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GBK"; public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); /*通过暴露给前台的接口来访问代理已调用映射的EJB方法*/ IHello service=new HelloImp(); String hello=service.helloWorld(); //调用接口中方法 out.print(hello); //输出测试结果,如果能在浏览器看到结果就代表访问EJB成功了 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void destroy() { } }

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:21
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
编写web.xml:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.
&lt;web-app&gt;
  &lt;display-name&gt;WebModule&lt;/display-name&gt;
  &lt;servlet&gt;
    &lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;              .....servlet名字
    &lt;servlet-class&gt;demo.TestServlet&lt;/servlet-class&gt;       .....servlet的完整路径名
  &lt;/servlet&gt;
  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;              .....servlet名字
    &lt;url-pattern&gt;/testservlet&lt;/url-pattern&gt;               .....servlet映射名字
  &lt;/servlet-mapping&gt;
&lt;/web-app&gt;
编写weblogic.xml:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.
&lt;weblogic-web-app&gt;
  &lt;context-root&gt;WebModule&lt;/context-root&gt;                  ......web模型的名称
&lt;/weblogic-web-app&gt;
接下来启动服务器(下面时控制台信息):
G:\bea\user_projects\mydomain&gt;echo off
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;WebLogicServer&gt; &lt;BEA-000377&gt; &lt;Starting WebLogic Server with Java HotSpot(TM) Client VM Version 1.4.1_02-er-20030219 from Sun Microsystems Inc.&gt;
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;Configuration Management&gt; &lt;BEA-150016&gt; &lt;This server is being started as the administration server.&gt;
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;Management&gt; &lt;BEA-141107&gt; &lt;Version: WebLogic Server 8.1  Thu Mar 20 23:06:05 PST 2003 246620
WebLogic XMLX Module 8.1  Thu Mar 20 23:06:05 PST 2003 246620 &gt;
&lt;2005-2-26 下午23时47分06秒 CST&gt; &lt;Notice&gt; &lt;Management&gt; &lt;BEA-140005&gt;
&lt;Loading domain configuration from configuration repository at G:\bea\user_projects\mydomain\.\config.xml.&gt;
&lt;2005-2-26 下午23时47分13秒 CST&gt; &lt;Notice&gt; &lt;Security&gt; &lt;BEA-090082&gt; &lt;Security initializing using security realm myrealm.&gt;
&lt;2005-2-26 下午23时47分14秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000327&gt; &lt;Starting WebLogic Admin Server "myserver" for domain "mydomain"&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000331&gt; &lt;Started WebLogic Admin Server "myserver" for domain "mydomain" running in Development Mode&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000355&gt; &lt;Thread "ListenThread.Default" listening on port 7001, ip address 127.0.0.1&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000365&gt; &lt;Server state changed to RUNNING&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000360&gt; &lt;Server started in RUNNING mode&gt;                                                                                                                                       
然后部署EJB模型:(下面时控制台信息):
G:\bea\jdk141_02\bin\javaw  -classpath G:\bea\weblogic81\server\lib\weblogic_sp.jar;G:\bea\weblogic81\server\lib\weblogic.jar;G:\bea\weblogic81\server\lib\webservices.jar; weblogic.Deployer  -user system  -adminurl http://localhost:7001  -password 12345678  -activate  -name EJBModule -upload  -source G:/jbprojct/Demo/EJBModule.jar -targets myserver
Initiated Task: [0] [Deployer:149026]Deploy application EJBModule on myserver.

Task 0 completed: [Deployer:149026]Deploy application EJBModule on myserver.

Deployment completed on Server myserver
运行测试用servlet看看是否成功的调用了EJB:(下面时运行结果):
hello world
8.我在下载完j2sdk-1_4_2_07-windows-i586-p.exe后为什么无法安装,请问要用什么程序才能打开安装此文件
答:或者你没有下载完,或者你下载的有问题,sun的那个是会转发到其他的地方的,而且用flashget下载后是一个很奇怪的文件而不是那个规则的文件名。看一下你下载的文件名是什么。可能要改一下名字把最后改成.exe结尾的文件!
9.JSP连接数据大全
一、jsp连接Oracle8/8i/9i数据库(用thin模式)

testoracle.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

二、jsp连接Sql Server7.0/2000数据库

testsqlserver.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

三、jsp连接DB2数据库

testdb2.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

四、jsp连接Informix数据库

testinformix.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

五、jsp连接Sybase数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

六、jsp连接MySQL数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&amp;password=soft1234&amp;useUnicode=true&amp;characterEncoding=8859_1"
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

七、jsp连接PostgreSQL数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;
10.请问win98下jdk环境变量如何设置??
答;  Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。

JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
那么,下面的步骤和以后的应用你都要受累了,呵呵。设置方法:
JAVA_HOME=x:\JDK_1.4.2

PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成x:\JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
PATH=%JAVA_HOME%\bin;%PATH%
同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。

CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的".;",如果你看不清,我给你念念??句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件??为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下LINUX。
为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛!:) 这个是由java语言的import机制和jar机制决定的,你可以查资料解决。


呵呵,具体的设定方法: win2k\xp用户右键点击我的电脑-&gt;属性-&gt;高级-&gt;环境变量,修改下面系统变量那个框里的值就行了。
win9x用户修改autoexec.bat文件,在其末尾加入:
set JAVA_HOME=x:\JDK_1.4.2
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
就可以了。
11.为什么VJ++不好啊?
答:VJ++是微软版本的java,很多地方根本不符合java规范
12.请教:怎么在,命令提示符下将*.jar文件打开?
答:jar -xvf yourfile.jar
13.请教:jdk/bin下的javaw,javap都是干什么用的?
答;http://www.

http://www.
14.问各位大侠一个很菜的问题:
class Drawing
{
    Drawing()
    {
        System.out.println("Drawing constructed!");
    }
}

public class Cartoon extends Drawing
{
    Cartoon()
    {
        System.out.println("Cartoon constructed!");
    }
   
    public static void main(String [] args)
    {
        Cartoon c=new Cartoon();
        System.out.println(c);
    }
}

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:22
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
结果能出来,但是最后还会生成一行:Cartoon@12498b5 这是为什么啊? 答:System.out.println(c); 如果c为Stirng,int,float,...等类型,则会直接打印 如果c为对象的话,则会先调用这个对象的toString()方法得到一个String,再打印这个String. 所以上句相当于: String temp = c.toString(); System.out.println(temp); 对于任何一个我们自己编写的类,如果我们没有让它继承某个别的类,那么它就会默认的继承java.lang.Object类(实际上java里的所有类、不管是我们自己写的还是java语言自带的,都直接或者间接的继承了java.lang.Object)。 由于你写的类里没有覆写toString()方法,那么打印的时候就会调用java.lang.Object的方法,打印当前的对象的内存地址 15.如何实现贯穿整个系统的全局变量.例如:一个用户登录了,需要把用户及权限名放入变量内,当用户访问其他程序时需要检测该用户的权限.请名位高手指点! 答:使用静态成员变量,如 public class Test { public static String uid; } (注明:以上是转帖)

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:24
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
JAVAC表示编译成功。编译成功而不显示结果,我认为可能有以下两种情况:
一 .有可能是你输出结果为空,这样的话实际已执行,结果即为什么都不做。
二 ..若你的是APPLET程序,那么用JAVAC生成*.class文件后,运行JAVA  *.class也不会有结果的。

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-21 14:10
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句: String string = s; 我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。 问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new String("foo"); String b=new String("foo"); 则a==b将返回false。 根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。 对象内容的比较,正是equals方法做的事。 看一下Object对象的equals方法是如何实现的: boolean equals(Object o){ return this==o; } Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。 看一下一个极端的类: Class Monster{ private String content; ... boolean equals(Object another){ return true;} } 我覆盖了equals方法。这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。 所以当你是用equals方法判断对象的内容是否相等,请不要想当然。因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。 问题三:String到底变了没有? 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码: String s = "Hello"; s = s + " world!"; s所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中,s原先指向一个String对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。 通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。 同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做: public class Demo { private String s; ... public Demo { s = "Initial value"; } ... } 而非 s = new String("Initial value"); 后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。 上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即StringBuffer。 问题四:final关键字到底修饰了什么? final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。 引用本身的不变: final StringBuffer a=new StringBuffer("immutable"); final StringBuffer b=new StringBuffer("not immutable"); a=b;//编译期错误 引用指向的对象不变: final StringBuffer a=new StringBuffer("immutable"); a.append(" broken!"); //编译通过 可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。 理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。 问题五:到底要怎么样初始化! 本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。 1. 类的属性,或者叫值域 2. 方法里的局部变量 3. 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。 int类型变量默认初始值为0 float类型变量默认初始值为0.0f double类型变量默认初始值为0.0 boolean类型变量默认初始值为false char类型变量默认初始值为0(ASCII码) long类型变量默认初始值为0 所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。 对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。 对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧! 其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。 问题六:instanceof是什么东东? instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子: String s = "I AM an Object!"; boolean isObject = s instanceof Object; 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。 instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类: public class Bill {//省略细节} public class PhoneBill extends Bill {//省略细节} public class GasBill extends Bill {//省略细节} 在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断: public double calculate(Bill bill) { if (bill instanceof PhoneBill) { //计算电话账单 } if (bill instanceof GasBill) { //计算燃气账单 } ... } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了: public double calculate(PhoneBill bill) { //计算电话账单 } public double calculate(GasBill bill) { //计算燃气账单 } 所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-31 17:37
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
以下是测试代码:

public class ceshiString{
static  String a="abc";
static  String b="abc";
static   String c=new String("abc");
public static void main(String args[ ])
    {
        if(a==b)System.out.println("a==b");
        if(a.equals(b)) System.out.println("a equals b");
        if(a.equals(c)) System.out.println("a equals c");
        if(a==c)        System.out.println("a==c");
    }
}

结果:
a==b
a equals b
a equals c

运行结果说明 a和b 是指向同一个对象“abc”,这说明“先程序在运行的时候会创建一个字符串缓冲池,当用这种方法:String s="abc"的时候。他会首先在缓冲池中找有没有相同的值,要是有的话就就将这个s指向已有的值。”是有道理的,而c 是另外一个对象

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-31 17:39
快速回复:初学者请进!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018999 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved