上海水磨工作室

Java编程学习示例

写范文发表于:2022-06-07 03:59:04

一、运行前准备

建议了一个MSSQLServer7数据库DNS,名称为:Test_DB

Java编程学习示例

数据库中有一个表:guestbook字段为:name(varchar),email(varchar),body(text)

上海水磨工作室数据库用户为sa密码空,可以自己修改的。

二、代码

<%@page=""contenttype="text/html;charset=gb2312">

<%

//变量声明

java上海水磨工作室.sql.ConnectionsqlCon;//数据库连接对象

上海水磨工作室java.sql.StatementsqlStmt;//SQL语句对象

java.sql.ResultSetsqlRst;//结果集对象

上海水磨工作室java.lang.StringstrCon;//数据库连接字符串

java.lang.StringstrSQL;//SQL语句

上海水磨工作室intintPageSize;//一页显示的记录数

上海水磨工作室intintRowCount;//记录总数

上海水磨工作室intintPageCount;//总页数

上海水磨工作室intintPage;//待显示页码

上海水磨工作室java.lang.StringstrPage;

inti,j,k;//设置一页显示的记录数

上海水磨工作室intPageSize=5;//取得待显示页码

strPage=request.getParameter("page");

if(strPage==null){

//表明在QueryString中没有page这一个参数,此时显示第一页数据

intPage=1;

}else{

上海水磨工作室//将字符串转换成整型

intPage=java.lang.Integer.parseInt(strPage);

if(intPage<1)intPage=1;}

//装载JDBC-ODBC驱动程序

上海水磨工作室Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//设置数据库连接字符串

上海水磨工作室strCon="jdbc:odbc:Test_DB";

//连接数据库

sqlCon=java.sql.DriverManager.getConnection(strCon,"sa","");

上海水磨工作室//创建SQL语句对象

上海水磨工作室sqlStmt=sqlCon.createStatement();

//获取记录总数

上海水磨工作室strSQL="selectcount(*)fromguestbook";

sqlRst=sqlStmt.executeQuery(strSQL);

上海水磨工作室//执行SQL语句并取得结果集

上海水磨工作室sqlRst.next();//记录集刚打开的时候,指针位于第一条记录之前

上海水磨工作室intRowCount=sqlRst.getInt(1);

上海水磨工作室sqlRst.close();//关闭结果集

//记算总页数

上海水磨工作室intPageCount=(intRowCount+intPageSize-1)/intPageSize;

上海水磨工作室//调整待显示的页码if(intPage>intPageCount)intPage=intPageCount;

//设置获取数据SQL语句

strSQL="selectname,email,bodyfromguestbook";

上海水磨工作室//执行SQL语句并取得结果集

上海水磨工作室sqlRst=sqlStmt.executeQuery(strSQL);

上海水磨工作室//将记录指针定位到待显示页的第一条记录上

i=(intPage-1)*intPageSize;

for(j=0;j;j++)>

jdbc-odbc留言版

<%

//显示数据

i=0;

while(i

<%>

上海水磨工作室第<%=intpage%>页共<%=intpagecount%>页

<%if(intPage){%>

下一页<%

}

%>

上海水磨工作室<%if(intpage>1){%>

上一页<%

}

%>

<%

//关闭结果集

上海水磨工作室sqlRst.close();

上海水磨工作室//关闭SQL语句对象

上海水磨工作室sqlStmt.close();

//关闭数据库

上海水磨工作室sqlCon.close();

%>

三、怎么去运行?

上海水磨工作室将代码存为文件test.jsp

OrionApplicationServer下:

Copy到orion的default-web-app目录下,通过:

localhost:port/test.jsp

访问测试

对于Resin,Tomcat,JWS等等,都可以运行通过。

 

第2篇:Java程序设计示例教程

本文以实例形式详细讲述了Java的反射机制,是Java程序设计中重要的技巧。分享给大家供大家参考。具体分析如下:

首先,Reflection是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说"自审",并能直接*作程序的内部属*。例如,使用它能获得Java类中各成员的名称并显示出来。Java的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特*。例如,Pascal、C或者C++中就没有办法在程序中获得函数定义相关的信息。

JavaBean是reflection的实际应用之一,它能让一些工具可视化的*作软件组件。这些工具通过reflection动态的载入并取得Java组件(类)的属*。

1.一个简单的例子

上海水磨工作室考虑下面这个简单的例子,让我们看看reflection是如何工作的。

importjava.lang.reflect.*;publicclassDumpMethods{publicstaticvoidmain(Stringargs[]){try{Classc=Class.forName("java.util.Stack");Methodm[]=c.getDeclaredMethods();for(inti=0;i<m.length;i++)System.out.println(m[i].toString());}catch(Throwablee){System.err.println(e);}}}

它的结果输出为:

publicsynchronizedjava.lang.Objectjava.util.Stack.pop()publicjava.lang.Objectjava.util.Stack.push(java.lang.Object)publicbooleanjava.util.Stack.empty()publicsynchronizedjava.lang.Objectjava.util.Stack.peek()publicsynchronizedintjava.util.Stack.search(java.lang.Object)

上海水磨工作室这样就列出了java.util.Stack类的各方法名以及它们的限制符和返回类型。

上海水磨工作室这个程序使用Class.forName载入指定的类,然后调用getDeclaredMethods来获取这个类中定义了的方法列表。java.lang.reflect.Methods是用来描述某个类中单个方法的一个类。

上海水磨工作室2.开始使用Reflection

用于reflection的类,如Method,可以在java.lang.relfect包中找到。使用这些类的时候必须要遵循三个步骤:第一步是获得你想*作的类的java.lang.Class对象。在运行中的Java程序中,用java.lang.Class类来描述类和接口等。

下面就是获得一个Class对象的方法之一:

Classc=Class.forName("java.lang.String");

上海水磨工作室这条语句得到一个String类的类对象。还有另一种方法,如下面的语句:

Classc=int.class;或者Classc=Integer.TYPE;

它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类(如Integer)中预先定义好的TYPE字段。

上海水磨工作室第二步是调用诸如getDeclaredMethods的方法,以取得该类中定义的所有方法的列表。

上海水磨工作室一旦取得这个信息,就可以进行第三步了——使用reflectionAPI来*作这些信息,如下面这段代码:

Classc=Class.forName("java.lang.String");Methodm[]=c.getDeclaredMethods();System.out.println(m[0].toString());

上海水磨工作室它将以文本方式打印出String中定义的第一个方法的原型。

在下面的例子中,这三个步骤将为使用reflection处理特殊应用程序提供例证。

模拟instanceof*作符

得到类信息之后,通常下一个步骤就是解决关于Class对象的一些基本的问题。例如,Class.isInstance方法可以用于模拟instanceof*作符:

上海水磨工作室classS{}publicclassIsInstance{publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("S");booleanb1=cls.isInstance(newInteger(37));System.out.println(b1);booleanb2=cls.isInstance(newS());System.out.println(b2);}catch(Throwablee){System.err.println(e);}}}

在这个例子中创建了一个S类的Class对象,然后检查一些对象是否是S的实例。Integer(37)不是,但newS()是。

3.找出类的方法

上海水磨工作室找出一个类中定义了些什么方法,这是一个非常有价值也非常基础的reflection用法。下面的代码就实现了这一用法:

importjava.lang.reflect.*;publicclassMethod1{privateintf1(Objectp,intx)throwsNullPointerException{if(p==null)thrownewNullPointerException();returnx;}publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Method1");Methodmethlist[]=cls.getDeclaredMethods();for(inti=0;i<methlist.length;i++){Methodm=methlist[i];System.out.println("name="+m.getName());System.out.println("declclass="+m.getDeclaringClass());Classpvec[]=m.getParameterTypes();for(intj=0;j<pvec.length;j++)System.out.println("param#"+j+""+pvec[j]);Classevec[]=m.getExceptionTypes();for(intj=0;j<evec.length;j++)System.out.println("exc#"+j+""+evec[j]);System.out.println("returntype="+m.getReturnType());System.out.println("-----");}}catch(Throwablee){System.err.println(e);}}}

这个程序首先取得method1类的描述,然后调用getDeclaredMethods来获取一系列的Method对象,它们分别描述了定义在类中的每一个方法,包括public方法、protected方法、package方法和private方法等。如果你在程序中使用getMethods来代替getDeclaredMethods,你还能获得继承来的各个方法的信息。

取得了Method对象列表之后,要显示这些方法的参数类型、异常类型和返回值类型等就不难了。这些类型是基本类型还是类类型,都可以由描述类的对象按顺序给出。

输出的结果如下:

上海水磨工作室name=f1declclass=classmethod1param#0classjava.lang.Objectparam#1intexc#0classjava.lang.NullPointerExceptionreturntype=int-----name=maindeclclass=classmethod1param#0class[Ljava.lang.String;returntype=void

4.获取构造器信息

获取类构造器的用法与上述获取方法的用法类似,如:

上海水磨工作室importjava.lang.reflect.*;publicclassConstructor1{publicConstructor1(){}protectedConstructor1(inti,doubled){}publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Constructor1");Constructorctorlist[]=cls.getDeclaredConstructors();for(inti=0;i<ctorlist.length;i++){Constructorct=ctorlist[i];System.out.println("name="+ct.getName());System.out.println("declclass="+ct.getDeclaringClass());Classpvec[]=ct.getParameterTypes();for(intj=0;j<pvec.length;j++)System.out.println("param#"+j+""+pvec[j]);Classevec[]=ct.getExceptionTypes();for(intj=0;j<evec.length;j++)System.out.println("exc#"+j+""+evec[j]);System.out.println("-----");}}catch(Throwablee){System.err.println(e);}}}

上海水磨工作室这个例子中没能获得返回类型的相关信息,那是因为构造器没有返回类型。

这个程序运行的结果是:

上海水磨工作室name=Constructor1declclass=classConstructor1param#0intparam#1double-----name=Constructor1declclass=classConstructor1-----

上海水磨工作室5.获取类的字段(域)

找出一个类中定义了哪些数据字段也是可能的,下面的代码就在干这个事情:

importjava.lang.reflect.*;publicclassField1{privatedoubled;publicstaticfinalinti=37;Strings="testing";publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Field1");Fieldfieldlist[]=cls.getDeclaredFields();for(inti=0;i<fieldlist.length;i++){Fieldfld=fieldlist[i];System.out.println("name="+fld.getName());System.out.println("declclass="+fld.getDeclaringClass());System.out.println("type="+fld.getType());intmod=fld.getModifiers();System.out.println("modifiers="+Modifier.toString(mod));System.out.println("-----");}}catch(Throwablee){System.err.println(e);}}}

这个例子和前面那个例子非常相似。例中使用了一个新东西Modifier,它也是一个reflection类,用来描述字段成员的修饰语,如“privateint”。这些修饰语自身由整数描述,而且使用Modifier.toString来返回以“官方”顺序排列的字符串描述(如“static”在“final”之前)。这个程序的输出是:

上海水磨工作室name=ddeclclass=classField1type=doublemodifiers=private-----name=ideclclass=classField1type=intmodifiers=publicstaticfinal-----name=sdeclclass=classField1type=classjava.lang.Stringmodifiers=-----

和获取方法的情况一下,获取字段的时候也可以只取得在当前类中申明了的字段信息(getDeclaredFields),或者也可以取得父类中定义的字段(getFields)。

6.根据方法的名称来执行方法

上海水磨工作室文本到这里,所举的例子无一例外都与如何获取类的信息有关。我们也可以用reflection来做一些其它的事情,比如执行一个指定了名称的方法。下面的示例演示了这一*作:

importjava.lang.reflect.*;publicclassMethod2{publicintadd(inta,intb){returna+b;}publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Method2");Classpartypes[]=newClass[2];partypes[0]=Integer.TYPE;partypes[1]=Integer.TYPE;Methodmeth=cls.getMethod("add",partypes);Method2methobj=newMethod2();Objectarglist[]=newObject[2];arglist[0]=newInteger(37);arglist[1]=newInteger(47);Objectretobj=meth.invoke(methobj,arglist);Integerretval=(Integer)retobj;System.out.println(retval.intValue());}catch(Throwablee){System.err.println(e);}}}

假如一个程序在执行的某处的时候才知道需要执行某个方法,这个方法的名称是在程序的运行过程中指定的(例如,JavaBean开发环境中就会做这样的事),那么上面的程序演示了如何做到。

上例中,getMethod用于查找一个具有两个整型参数且名为add的方法。找到该方法并创建了相应的Method对象之后,在正确的对象实例中执行它。执行该方法的时候,需要提供一个参数列表,这在上例中是分别包装了整数37和47的两个Integer对象。执行方法的返回的同样是一个Integer对象,它封装了返回值84。

上海水磨工作室7.创建新的对象

对于构造器,则不能像执行方法那样进行,因为执行一个构造器就意味着创建了一个新的对象(准确的说,创建一个对象的过程包括分配内存和构造对象)。所以,与上例最相似的例子如下:

上海水磨工作室importjava.lang.reflect.*;publicclassConstructor2{publicConstructor2(){}publicConstructor2(inta,intb){System.out.println("a="+a+"b="+b);}publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Constructor2");Classpartypes[]=newClass[2];partypes[0]=Integer.TYPE;partypes[1]=Integer.TYPE;Constructorct=cls.getConstructor(partypes);Objectarglist[]=newObject[2];arglist[0]=newInteger(37);arglist[1]=newInteger(47);Objectretobj=ct.newInstance(arglist);}catch(Throwablee){System.err.println(e);}}}

根据指定的参数类型找到相应的构造函数并执行它,以创建一个新的对象实例。使用这种方法可以在程序运行时动态地创建对象,而不是在编译的时候创建对象,这一点非常有价值。

8.改变字段(域)的值

reflection的还有一个用处就是改变对象数据字段的值。reflection可以从正在运行的程序中根据名称找到对象的字段并改变它,下面的例子可以说明这一点:

上海水磨工作室importjava.lang.reflect.*;publicclassField2{publicdoubled;publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("Field2");Fieldfld=cls.getField("d");Field2f2obj=newField2();System.out.println("d="+f2obj.d);fld.setDouble(f2obj,12.34);System.out.println("d="+f2obj.d);}catch(Throwablee){System.err.println(e);}}}

上海水磨工作室这个例子中,字段d的值被变为了12.34。

9.使用数组

本文介绍的reflection的最后一种用法是创建的*作数组。数组在Java语言中是一种特殊的类类型,一个数组的引用可以赋给Object引用。观察下面的例子看看数组是怎么工作的:

importjava.lang.reflect.*;publicclassArray1{publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("java.lang.String");Objectarr=Array.newInstance(cls,10);Array.set(arr,5,"thisisatest");Strings=(String)Array.get(arr,5);System.out.println(s);}catch(Throwablee){System.err.println(e);}}}

例中创建了10个单位长度的String数组,为第5个位置的字符串赋了值,最后将这个字符串从数组中取得并打印了出来。

上海水磨工作室下面这段代码提供了一个更复杂的例子:

importjava.lang.reflect.*;publicclassArray2{publicstaticvoidmain(Stringargs[]){intdims[]=newint[]{5,10,15};Objectarr=Array.newInstance(Integer.TYPE,dims);Objectarrobj=Array.get(arr,3);Classcls=arrobj.getClass().getComponentType();System.out.println(cls);arrobj=Array.get(arrobj,5);Array.setInt(arrobj,10,37);intarrcast[][][]=(int[][][])arr;System.out.println(arrcast[3][5][10]);}}

上海水磨工作室例中创建了一个5x10x15的整型数组,并为处于[3][5][10]的元素赋了值为37。注意,多维数组实际上就是数组的数组,例如,第一个Array.get之后,arrobj是一个10x15的数组。进而取得其中的一个元素,即长度为15的数组,并使用Array.setInt为它的第10个元素赋值。

上海水磨工作室注意创建数组时的类型是动态的,在编译时并不知道其类型。

相信本文所述对大家Java程序设计的学习有一定的借鉴价值。

 

第3篇:学习JAVA编程语言须知

学习任何技术都需要有准确的理解和大量的有质量的练习。下面是关于学习JAVA编程语言须知的知识,欢迎阅读!

1.有必要知道什么是程序,什么是算法。

你知道它是什么,便不会学得懵懵懂懂。学习java上海水磨工作室编程跟学习其他编程语言一样,都需要明白这是一种解决问题的语言表达形式。通过这种计算机语言描述出解决问题的方式方法,以便于在计算机上实现它。

就比如,你希望有一个可以计时的秒表,我就用编程语言设计一个秒表软件实现你的需求。实现需求的过程就是用编程语言编写程序的过程,解决这个需求的方法也叫算法,也就是解决问题的方法。算法是任何一个编程语言的核心。了解了这个,就已经走上了学习编程的正路。

2.编程语言有很多种,选择java是只选择了其中一种表述和实现方式。

设定编程语言是因为计算机是一个僵硬的东西,自然语言是它所不能理解的,故而需要设定一种它可以理解的语言,让它听懂你说的指令,它才能为你服务。

理解了何为计算机程序和编程,下面就具体到不同种类的编程语言的选择。不同种类的编程语言就类似于现实中的各国家的语言,英语,法语,还有我们最熟悉的汉语,同样的问题,会有不同形式的表现。汉语中描述自己是“我”,英语中是“I”,其他语言中又是另外的表述。不同的编程语言的区别也基本类似。不同语言的区别主要在于对于算法的表述方式不同,程序语言的适用范围不同。因为表述方式和适用范围的问题,诸多编程语言便可以区分开来,使用时也根据这两点进行选择。

学习时有很多语言,如C、C++、java,这三种编程语言是因为不同的需求而研发的。java与前两者相比的优势在于可移植*强,对于系统和硬件要求不高。了解了这个你就大体知道java的特*了。java和C语言上海水磨工作室有一定渊源,和C++是很像的,学过C和C++的再学习java比较简单一些,没有这些学习经历也不用担心,只需要足够的练习量便可解决这一问题。

上海水磨工作室3.编程还是要从实践*强的方面入手的。

具体不赘言了,源远流长的东西讲太多实际上是舍本逐末,学到技能是根本。

在学习java过程中还需要巧妙的理解方法和思维转换。比如“变量”这一概念的理解,就可以对应成房间或者箱子,编程中声明一个变量就是开一个房间,变量名是房间名,变量类型是房间类型,赋值给变量就是房间里住了一个人。由此你也可以知道,为什么叫变量呢,因为这个“房间”里可以反复进出很多“人”。很多人刚碰触编程,对于编程那些一行行的字母感到恐惧,其实编程的模式再简单不过,几乎是固定的模式。

举个简单例子:

上海水磨工作室publicclassTest{

publicstaticvoidmain(String[]args){

System.out.print("我想学java!");

}

}

上海水磨工作室这个程序运行后是输出“我想学java!”这句话。开头“publicclassTest{}”是一个java程序的框架,相当于盖楼时的楼架子,素描时的轮廓,浇筑机械零件时的模具。

上海水磨工作室然后程序框架之内的大括号里是更进一步的内容。“publicstaticvoidmain(String[]args){}”这是这段程序的入口,类似于盖楼房后的入口,素描后的第一笔细描等。总之是框架之后,设定的一个开始的位置。程序从这个地方开始。程序入口大括号内的内容就是具体的指令和运行内容。

System.out.print("我想学java!");程序运行后就会输出内容:我想学java!从这个java程序就可以看出很多java程序的共*,他们都会有java程序框架,框架之内都会有一个java程序入口。这就是一个固定的模式,记住它,适当的理解就可以了。巧妙的理解和思维转换的关键也在于之前所说的和生活联系,和你已有的经验联系起来。因为程序本就是从生活而来。