java编程技术

2024-06-03

java编程技术(通用12篇)

java编程技术 篇1

Java动画编程中的手机动画死机、图像闪烁或残缺、图像迟滞等现象,是Java程序员经常遇到的问题。Java动画编程有多种实现方法,但实现的基本原理都是在屏幕上画出一系列的帧来造成运动的感觉。阐述如何运用技巧达到动画显示的优化。

Java的动画编程,为了不断更新屏幕显示图像,一般采用创建线程,在线程中调用帧图像循环的方法实现动画。而如果在主线程中调用动画循环,则会占用过多CPU资源而影响程序效率,并且不利于动画程序的调用控制。因此,应单独创建一个实现动画循环的动画线程,当动画循环完成后,应及时停止该线程以释放CPU资源,即在程序中将线程置为null,代码为:animatorThread=null。如需同时实现多个动画显示,可利用Java多线程技术,利用主AWT线程调用其余各线程,图像过大时可采用其后所述技术优化动画显示效果。

动画显示不平滑甚至发生闪烁的原因是因为图像更新的频率与屏幕的刷新频率不一致造成的。发生闪烁有两个原因:一是由于在显示下一帧画面的时候,调用了repaint()方法;而repaint()方法被调用时,要清除整个背景,然后才调用paint()方法显示画面。在清除背景和绘制图像的短暂时间间隔内被用户看见的就是闪烁。另一个是由于paint()方法要进行复杂的计算,绘制每一帧花费的时间太长,图像中的各个像素值不能同时得到,使得动画的生成频率低于显示器的刷新频率,从而造成闪烁。可利用重载和双缓存技术解决这个问题。重载:当AWT接收到一个Applet的重绘请求时,它就调用update()方法清除Applet的背景,然后调用paint()方法。重载update()方法就可以将以前在paint()方法中的绘图代码包含在update()方法中,从而避免每次重绘时将整个区域清除。既然背景不再自动清除,Java程序员需要自己在update()中完成。双缓冲技术:主要原理是创建一幅后台图像,将每一帧画入图像,然后调用drawImage()方法将整个后台图像一次画到屏幕上去。这种方法的优点在于大部分绘制是离屏的。将离屏图像一次绘至屏幕上,比直接在屏幕上绘制要有效得多。在创建后台图像前,首先要通过调用createImage()方法生成合适的后台缓冲区,然后获得在缓冲区做图的环境(即Graphics类对象)。双缓存技术的缺点是当图像过大时,会占用内存很大的空间而影响程序的运行。实现较高的帧速度会产生平滑的动画,从而消除闪烁,因此,可在动画显示的每两帧之间,调用线程的sleep()方法休眠一个固定的时间。这样做的缺点是使用绝对的延迟时间会使延迟过长,即造成等待时间过长。

当需要动画速率不因硬件环境而发生改变时,为了保持恒定的帧速度(也就是恒定的显示频率),在线程的run()方法中可加入如下代码:

另一种方法是创建一个线程,用于提供一个严格的时间信号,控制动画定时刷新。

因为图像是逐帧载入屏幕的,所以当动画线程刚开始时,出现图像残缺等现象,这时可以使用MediaTracker或ImageOberver类对象进行图像跟踪,待图像全部载入后,再调用drawImage()方法将图像输出到屏幕上去。

而在不同硬件环境下,需要设计不同的动画优化方案。如在手机动画游戏等缓存过小的条件下设计程序,如采用双缓存技术显示动画,图像过大时会因占用过多内存,而使程序运行不稳定,这时就需要合理地设计和使用缓存。线程运行结束时应及时释放缓存,代码如下:

在Java程序运行中,采用的是自动回收内存的GC机制,而当内存泄露时,GC无法释放内存,即当程序中的对象申请了内存空间没有释放,而这些对象却是无用的,即程序以后不会再使用这些对象时,这些对象就可以判定为Java中的内存泄漏,这些对象不会自动被GC所回收,然而它却占用内存。可运行GC的函数System.gc()访问GC,根据Java语言规范定义,该函数虽然不保证GC一定会执行内存回收,但可在一定程度上调用GC防止内存泄露,所以,可在调用双缓存技术程序末尾加上语句System.gc()。不同的JVM实现者可能使用不同的算法管理GC。通常,GC的线程的优先级别较低,那么需要调整GC的参数,让GC工作的速率与需要释放缓存的速率一致,Sun提供的HotSpot JVM就支持这一特性。

具体的动画编程,应根据具体软硬件环境结合程序要求,选择适合的优化方案。

摘要:Java动画编程在游戏软件开发、程序设计中应用广泛。针对不同环境下的Java动画编程的常用技术进行了分析,介绍了根据不同编程环境,消除动画闪烁及优化显示效果的技巧。

关键词:Java动画编程,缓存技术,游戏动画优化,GC

参考文献

[1]刘岩松.基于Java的动画速率精确控制.辽宁师专学报,2005,10.

[2]李海兵.Java的缓存系统的设计.电脑编程技巧与维护,2010,(24).

java编程技术 篇2

JAVA编程习题1

4.test10097求两个数的和

/*输入n表示做n次下面的操作: 输入两个正整数,输出它们的和.例: 输入:

//表示n=2,做两次操作 10 11 20 30 输出: sum=21 sum=50 */

5.test20001求两个数的和与差

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

/*程序填空,不要改变与输入输出有关的语句。输入整数a和b,计算并输出a、b的和与差。例: 输入 2-8 输出 The sum is-6 The difference is 10*/

6.test20002求平方根

//程序填空,不要改变与输入输出有关的语句。输入1个实数x,计算并输出其平方根。例: 输入 1.21 输出

The square root of 1.21 is 1.1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

7.test20003华氏温度转换成摄氏温度

/*程序填空,不要改变与输入输出有关的语句。

输入华氏温度f,计算并输出相应的摄氏温度c。c = 5/9(f-32).例:括号内是说明 输入

17.2(华氏温度)输出

The temprature is-8.****/

8.test20004计算旅途时间

程序填空,不要改变与输入输出有关的语句。

输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。

有效的时间范围是0000到2359,不需要考虑出发时间晚于到达时间的情况。

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

例:括号内是说明 输入

712 1411(出发时间是7:10,到达时间是14:11)输出

The train journey time is 6 hrs 59 mins.9.test20005数字加密

程序填空,不要改变与输入输出有关的语句。输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。例:括号内是说明 输入 1257 输出

The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

10.test20006大小写字母转换

程序填空,不要改变与输入输出有关的语句。输入一个大写英文字母,输出相应的小写字母。例: 输入 G 输出 g

import java.io.*;public class T20006 {

public static void main(String[] args)throws IOException

{

char ch;

ch=(char)System.in.read();

/*------------------*/

ch=(char)(ch+32);

// 以ASCII码计算

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

}

System.out.println(ch);

} 11.Test20007计算三门课程的平均成绩

程序填空,不要改变与输入输出有关的语句。

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。本题无输入。输出示例:

math = 87, eng = 72, comp = 93 average = 84

12.test20008计算存款利息

程序填空,不要改变与输入输出有关的语句。输入存款金额 money、存期 year 和年利率 rate,精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

根据下列公式计算存款到期时的利息 interest(税前),输出时保留2位小数。

interest = money(1+rate)^year10 / 2 =

(数字与运算符之间有一空格)输出 5 10 */ /*补充知识:in.next()与in.nextline()的区别

in.next只接受一个字,不能接受一个带有空格的字符串,如下: 例如输入: Show me--(回车)用next()只能得到Show,因为遇到空格表示结束,但是nextline()则要遇到回车才知道结束.可以看一个例子,演示给大家看,如下:----------

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

import java.util.Scanner;public class Test60011{

public static void main(String []args)

{

String s1_1,s1_2,s2;

Scanner in=new Scanner(System.in);

s1_1=in.next();

System.out.println(s1_1);

System.out.println(“----------”);

in.nextLine();// 把剩余的吃掉

s2=in.nextLine();

System.out.println(s2);

System.out.println(“----------”);

s1_1=in.next();

s1_2=in.next();

System.out.println(s1_1+“

”+s1_2);

} }------------*/

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

39.求1+1/2!+……1/N!//求1+1/2!+1/3!+....(用方法求n!)

40.求a+aa+aaa+……(用方法)//求a+aa+aaa+aa…a

41.统计一个整数中数字的个数

/*程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=3)-21902 2

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

345543 输出:

count=2

(-21902中有2个2)count=1

(有1个2)count=0

(345543中没有2)*/

42.判断素数(用方法)

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

NO

(1不是素数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

YES

(2是素数)NO

(9不是素数)YES

(17是素数)

43.统计素数并求和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。例:括号内是说明 输入:

(repeat=3)1 10

(m=1, n=10)20 35(m=20, n=35)14 16(m=14, n=16)输出:

count=4, sum=17

(1到10之间有4个素数:2,3,5,7)count=3, sum=83

(20到35之间有3个素数:23, 29, 31)count=0, sum=0

(14到16之间没有素数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

44.输出Fibonacci序列

/*程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

Fibonacci 序列(第1项起):1 1 2 3 5 8 13 21......要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。输出语句:System.out.print(f+“ ”);

例:括号内是说明 输入:

(repeat=3)1 10

(m=1, n=10)20 100(m=20, n=100)1000 6000(m=1000, n=6000)输出: 1 2 3 5 8

(1到10之间的Fibonacci数)21 34 55 89

(20到100之间的Fibonacci数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

1597 2584 4181

(1000到6000之间的Fibonacci数)*/

45.求完数

/*输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数

(完数就是因子和与它本身相等的数)。

要求定义并调用函数factorsum(number),它的功能是返回number的因子和。

例如,factorsum(12)的返回值是16(1+2+3+4+6)。输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2

(repeat=2)20 500(m=100, n=400)1 100

(m=1, n=100)输出: 28 496 1 6 288*/

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

46.求各位数字的立方和等于它本身的数 程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2

(repeat=2)100 400(m=100, n=400)1 100

(m=1, n=100)输出:

153 370 371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

47.将一个整数逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

要求定义并调用函数reverse(number),它的功能是返回number的逆序数。

例如reverse(12345)的返回值是54321。例:括号内是说明 输入

(repeat=4)123456-100-2 99 输出 654321-1-2 99

48。十进制转换二进制

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

程序填空,不要改变与输入输出有关的语句。

输入一个正整数 repeat(0

要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。

输出语句:System.out.print(t);

//t为某位二进制数 例:括号内是说明 输入: 3

(repeat=3)15 100 0 输出: 1111 1100100 0

49。求平均值

程序填空,不要改变与输入输出有关的语句。

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输入一个正整数repeat(0

(repeat=2)3 1 2-6 5 12 2 5 4 0 输出 aver=-1.0 aver=4.6

50。求最大值及其下标

/*输入一个正整数n(1

(设最大值惟一,下标从0开始)。例:括号内是说明 输入

(repeat=3)3 1 6 4 3 10 8 1 5 1 2 5 4 0

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输出

max=6,index=1

(最大值6的下标是1)max=10,index=0

(最大值10的下标是0)max=5,index=2

(最大值5的下标是2)*/

51。逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=2)4 10 8 1 2 5 1 2 5 4 0 输出 2 1 8 10 0 4 5 2 1

52。交换最小值和最大值

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

最大值与最后一个数交换,然后输出交换后的n个数。例:括号内是说明 输入

(repeat=3)5 4 3 5 1 2 4 1 5 6 7 5 5 4 3 2 1 输出 1 3 2 4 5 1 5 6 7 1 4 3 2 5 53。排序

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=3)4 5 1 7 6 3 1 2 3 5 5 4 3 2 1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输出 7 6 5 1 3 2 1 5 4 3 2 1

54。矩阵运算

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(2+3+4+5+6+7+8=35)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

55。加法口诀表

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=1)3

(n=3)输出: +

56。判断上三角函数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(上三角矩阵,即主对角线以下的元素都为0, 主对角线为从矩阵的左

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

上角至右下角的连线)例:括号内是说明 输入:

(repeat=2)3 1 2 3

0 4 5 0 0 6(n=3)2 1 0-8 2

(n=2)输出: YES NO

57。求矩阵每行元素之和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=1)3 2(m=3, n=2)6 3 1-8

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 12 输出: sum of row 0 is 9 sum of row 1 is-7 sum of row 2 is 15

58。找鞍点

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=2)4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9(n=4)2 1 7 4 1

(n=2)输出: a[2][1]=6 NO

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

59。求字符串长度

程序填空,不要改变与输入输出有关的语句。连续输入一批以 # 结束的多串字符。统计并输出每串字符的长度。输出使用:System.out.println(len);例:括号内是说明 输入:

hello 12#abc+0#

(连续输入2串字符“hello 12”和“abc+0”)输出:

(“hello 12”的长度是8)5

(“abc+0”的长度是5)

60。统计大写辅音字母

程序填空,不要改变与输入输出有关的语句。输入一个正整数n(0

输入一行字符串,统计并输出字符串中大写辅音字母的个数(大写辅音字母:除“A”,“E”,“I”,“O”,“U”以外的大写字母)。例:括号内是说明 输入:

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

(输入3个字符串)HELLO IT12 uieiaba 输出:

(“HELLO”中有3个大写辅音字母)1

(“IT12”中有1个大写辅音字母)

0

(“uieiaba”中没有大写辅音字母)

61。查找字符

程序填空,不要改变与输入输出有关的语句。

先输入一个字符ch。然后输入一个正整数n(0

输入一行字符串,在字符串中查找该字符(ch),如果找到,则输出 该字符在字符串中最后出现的位置(从0开始);否则输出“Not Found”。例:括号内是说明 输入:

m

(输入一个字符)3

(要输入3行字符串)moon

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

programming 1234

输出:

0

(m在“moon”中最后出现位置是0)7

(m在“programming”中最后出现位置是7)Not Found

(“1234”中没有m)

62。字符串替换

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

对应字母

A ──→ Z

B ──→ Y

C ──→ X

D ──→ W

……

X ──→ C

Y ──→ B

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

Z ──→ A 例:括号内是说明 输入:

(输入3行字符串)A flag of USA IT12 oueiaba 输出: Z flag of FHZ RG12 oueiaba

63。十六进制转换十进制

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

个新字符串(十六进制形式),然后将其转换为十进制数后输出。例:括号内是说明 输入:

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

(输入3行字符串)10 Pf4+1-+A

输出: 16 3905 10

-----------------------

精心收集

精心编辑

精致阅读

Java编程语言程序的认识误区 篇3

软件的生命性

软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构,反复强调都不过分。

一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。

目前,很多人对软件的思想焦点还是落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。

正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbiz compiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。

那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。

存储过程和复杂SQL语句的陷阱

首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?

为什么这样说呢?如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。

从分层角度来看,现在三层架构:表现层、业务层和持久层,三个层次应该分割明显,职责分明,持久层职责持久化保存业务模型对象,业务层对持久层的调用只是帮助我们激活曾经委托其保管的对象。所以,不能因为持久层是保管者,我们就以其为核心围绕其编程,除了要求其归还模型对象外,还要求其做其复杂的业务组合。打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?

上面是谈过分依赖持久层的一个现象,还有一个正好相反现象,持久层散发出来,开始挤占业务层,腐蚀业务层,整个业务层到处看见的是数据表的影子(包括数据表的字段),而不是业务对象。

当然适量使用存储过程,使用数据库优点也是允许的。按照Evans DDD理论,可以将SQL语句和存储过程作为规则Specification一部分。

Hibernate等ORM问题

现在使用Hibernate人也不少,但是他们发现Hibernate性能缓慢,所以寻求解决方案,其实并不是 Hibernate性能缓慢,而是我们使用方式发生错误:

“最近本人正搞一个项目,项目中我们用到了struts1.2+hibernate3,由于关系复杂表和表之间的关系很多,在很多地方把lazy都设置false,所以导致数据一加载很慢,而且查询一条数据更是非常的慢。”

Hibernate是一个基于对象模型持久化的技术,因此,关键是我们需要设计出高质量的对象模型,遵循DDD领域建模原则,减少降低关联,通过分层等有效办法处理关联。如果采取围绕数据表进行设计编程,加上表之间关系复杂(没有科学方法处理、侦察或减少这些关系),必然导致系统运行缓慢,其实同样问题也适用于当初对EJB的实体Bean的CMP抱怨上,实体Bean是Domain Model持久化,如果不首先设计Domain Model,而是设计数据表,和持久化工具设计目标背道而驰,能不出问题吗?关于这个问题N多年前就争论过。

这里同样延伸出另外一个问题:数据库设计问题,数据库是否需要在项目开始设计?

如果我们进行数据库设计,那么就产生了一系列问题:当我们使用Hibernate实现持久保存时,必须考虑事先设计好的数据库表结构以及他们的关系如何和业务对象实现映射,这实际上是非常难实现的,这也是很多人觉得使用ORM框架棘手根本原因所在。

当然,也有脑力相当发达的人可以实现,但是这种围绕数据库实现映射的结果必然扭曲业务对象,这类似于两个板块(数据表和业务对象)相撞,必然产生地震,地震的结果是两败俱伤,软的一方吃亏,业务对象是代码,相当于数据表结构,属于软的一方,最后导致业务对象变成数据传输对象DTO,DTO满天飞,性能和维护问题随之而来。

领域建模解决了上述众多不协调问题,特别是ORM痛苦使用问题,关于 ORM/Hibernate使用还是那句老话:如果你不掌握领域建模方法,那么就不要用Hibernate,对于这个层次的你:也许No ORM 更是一个简单之道。

Spring分层矛盾问题

Spring是以挑战EJB面貌出现,其本身拥有的强大组件定制功能是优点,但是存在实战的一些问题,Spring作为业务层框架,不支持业务层Session 功能。

具体举例如下:当我们实现购物车之类业务功能时,需要将购物场合保存到 Session中,由于业务层没有方便的Session支持,我们只得将购物车保存到 HttpSession,而HttpSession只有通过HttpRequest才能获得,再因为在Spring业务层容器中是无法访问到 HttpRequest这个对象的,所以,最后我们只能将“购物车保存到HttpSession”这个功能放在表现层中实现,而这个功能明显应该属于业务层功能,这就导致我们的Java项目层次混乱,维护性差。 违背了使用Spring和分层架构最初目的。

领域驱动设计DDD

现在回到我们讨论的重点上来,分层架构是我们使用Java的根本原因之一,域建模专家Eric Evans在他的“Domain Model Design”一书中开篇首先强调的是分层架构,整个DDD理论实际是告诉我们如何使用模型对象oo技术和分层架构来设计实现一个Java项目。

我们现在很多人知道Java项目基本有三层:表现层、业务层和持久层,当我们执着于讨论各层框架如何选择之时,实际上我们真正的项目开发工作还没有开始,就是我们选定了某种框架的组合(如Struts+Spring+Hibernate或Struts+EJB或Struts+ JdonFramework),我们还没有意识到业务层工作还需要大量工作,DDD提供了在业务层中再划分新的层次思想,如领域层和服务层,甚至再细分为作业层、能力层、策略层等等。通过层次细化方式达到复杂软件的松耦合。DDD提供了如何细分层次的方式

当我们将精力花费在架构技术层面的讨论和研究上时,我们可能忘记以何种依据选择这些架构技术?选择标准是什么?领域驱动设计DDD 回答了这样的问题,DDD会告诉你如果一个框架不能协助你实现分层架构,那就抛弃它,同时,DDD也指出选择框架的考虑目的,使得你不会人云亦云,陷入复杂的技术细节迷雾中,迷失了架构选择的根本方向。

现在也有些人误以为DDD是一种新的理论,其实DDD和设计模式一样,不是一种新的理论,而是实战经验的总结,它将前人使用面向模型设计的方法经验提炼出来,供后来者学习,以便迅速找到驾驭我们软件项目的根本之道。

java编程技术 篇4

Java是一种面向对象的多线程解释型语言,具有健壮性、安全性、跨平台性、可移植性、动态性等诸多优点。在很多应用中,基于Java的应用开发都会涉及到与后台数据库的连接。目前,Java开发中的主流数据库连接技术有JDBC、连接池、Hibernate框架等几种。

2 Java数据库连接技术

2.1 JDBC数据库连接技术

JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,它提供了Java应用程序与各种不同数据库之间进行对话的接口。使用JDBC,Java程序员可以使用纯Java语言编写完整的数据库应用程序。

JDBC可分为4种类型[1,2]:

(1)JDBC-ODBC桥

最初的数据库连接方式是借助各数据库厂商提供的差异性极大的数据库驱动接口来实现的,因此其实现非常繁琐并且通用性差,具有很大的局限性。为此,微软首先提出了通用的数据库连接机制和标准以实现各种不同关系型数据库统一的互联规范,该规范即为ODBC(开放式数据库连接)。而JDBC-ODBC桥实质上是Java提供的一种以JDBC为介质,通过传统的ODBC驱动程序来访问数据库的方法。通过使用JDBC中连接ODBC驱动的驱动程序,即可实现这种数据库连接。该方案需要在本地安装ODBC类库和驱动程序。

(2)Java到本地API

JDBC-ODBC桥由于采用了一种间接的数据库驱动方式,因此,效率上打了一定的折扣。一种较为高效的JDBC连接方法是JDBC驱动程序使用Java本地接口直接调用本地的数据库API,从而实现对数据库的连接和对数据的操纵。该方案也要求在本地安装连接目标数据库的类库。

(3)Java到网络协议

这类JDBC驱动程序是纯Java的驱动程序,它通过一定的网络协议与数据库服务器上的JDBC中间件通信。由于该类驱动程序不要求在访问数据库的Java程序各地都安装目标数据库的类库,因此,它是最灵活的JDBC方案,使得程序可以通过网络协议与不同的数据库进行通信。

(4)Java到数据库协议

这类驱动程序也是纯Java程序实现的,它通过实现一定的数据库协议直接与数据库通信。由于该方案直接与数据库通信,因此,其效率是4种方案中最高的。

通常,Java应用程序访问数据库的过程分为如下4个步骤:

(1)装载数据库驱动程序。

(2)通过JDBC建立数据库连接。

(3)访问数据库,执行SQL语句。

(4)断开数据库连接。

2.2 连接池技术

利用连接池技术可以解决Java与数据库连接过程中资源频繁分配/释放所带来的效率问题。其核心思想是连接复用:建立一个数据库连接池以及一套连接使用、分配、管理策略,避免数据库连接频繁建立、关闭所带来的频繁资源分配、释放开销。连接池技术通事先建立一些连接并且防止在“缓冲池”中以备使用,当需要建立数据库连接时,并不需要直接向数据库发出请求,而只需要从数据库连接池中取得所需要的连接;而当应用程序使用完一个连接,也不需要从物理上关闭该连接,而是将连接归还给连接池[3,4]。

JDBC的API中并没有提供连接池的方法。一些大型的Web应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须要有第三方的专用类方法的支持。基于Java的连接池类的设计主要包括3个步骤[4]:

(1)定义连接池类:用于维护连接池中的连接对象,包括连接对象的创建、关闭、连接对象的数量,连接对象状态的监控、日志信息的记录。

(2)创建管理类:用于负责加载和注册所有JDBC驱动程序,根据对象的特点创建多个连接池对象,将客户请求映射到特定的连接池对象上,并提供客户从连接池获取和释放连接的接口,指定日志文件属性,将加载和注销JDBC驱动程序的信息记录到日志中。

(3)管理类与主程序的接口:用于记录最近使用时间、被使用的次数等连接池的状态。

2.3 Hibernate框架技术

通过吸收Spring等框架技术的优点,Sun在EJB3.0上做了一些大的改变和调整,提供了Hibernate框架技术。Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思想来操纵数据库。

Hibernate框架技术其本质还是JDBC,因为它是基于JD-BC实现的。JDBC本身具有强大的数据库连接功能,但是,由于JDBC复杂繁琐等原因,使用者对其的抱怨一直存在。为此,Sun不得不在Java的数据库连接问题上注入新的思想。为此,Sun提出了O-R Mapping(对象-关系映射)的概念,其基本思想是将Java的一个类与关系型数据库中的一张二维表相对应,这样,这个类的实例便与这张表的一条元组(一行)相对应,这种对应关系则通过其他的Java类(比如Top Link的descriptor类)或者XML文件来进行描述。通过这种映射关系,使得程序员不再需要直接与数据库打交道,而只需要通过操作Java对象。具体的与数据库的交互则交由系统去完成:框架会自动将对类的改动同步到相对应的表中。Hibernate框架正是在这种新思想的推动下产生的。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端使用,也可以在Servlet/JSP的Web应用中使用,并且,Hibernate可以在应用EJB的J2EE框架中取代CMP,完成数据持久化。

Hibernate的目标是简化开发者通常的数据持久化编程任务,以便大幅度地减少开发时人工使用SQL和JDBC处理数据的时间。通过使用Hibernate可以轻松解决开发者在使用传统的CMP以及JDBC和DAO技术开发持久层时遇到的困难。

3 结语

具有跨平台性的Java语言已经成为最常用的编程语言之一。在很多应用中,都涉及到使用Java开发的前台应用程序与后台数据库(Oracle、MSSQL Server、MySQL等)的连接和交互。

摘要:Java程序员经常访问数据库,在此介绍并比较了访问数据库的3种主要方法。

关键词:Java,JDBC,连接池,Hibernate

参考文献

[1]林元元.JDBC连接MySQL数据库的方法浅析[J].长沙通信职业技术学院学报,2009,(01).

[2]高伟,李爽,杜瑞庆.基于JDBC的SQL Server数据库访问[J].福建电脑,2008,(01).

[3]孙鑫鸽,陈刚,孙小玲.基于JDBC的数据库连接池技术的研究与设计[J].计算机与信息技术,2006,(08).

java编程就业前景 篇5

Java开发行业前景

Java语言是一门很实用的语言,在互联网的应用十分广泛,目前采用JAVA语言开发的网站也越来越多,所以对Java开发人才的需求量也是倍增。虽然说现在新的开发语言在市场上越来越多,但是根据有关数据表明,在所有程序员中,Java开发程序员就占据20%的比例。这说明Java开发仍然是一个热潮,它强大的影响力已经证明了自己的王者风范。

一位软件开发行业的前辈讲到,不可否认Java开发语言本身的庞大,它是全球最流行的开发语言,给程序界带来很大的影响,势必继续影响着整个互联网。

从人才需求方面看,软件开发是当下的发展趋势,而我国的软件开发人才极为缺乏,其中java人才缺口最大,对java软件工程师的需求达到全部需求量的60%-70%,如今互联网的趋势是移动端,Java又是安卓开发的基础,所以人才的需求又增加一大波。

从薪资水平看,java软件工程师的薪资相比其他开发工程师高出许多,具备3-5年工作经验的开发人员年薪都可以达到20到30万元。

所以说java的发展前景还是非常可观的,如果可以真正学好java这门技能,那我们的发展前景也是不可估量。现在很多人选择参加培训机构,这不失为一个最佳的选择,当然最重要的还是靠自己的努力。

Java软件工程师的就业前景

java软件工程师就业前景如何是许多软件工程师都困惑的问题,他们有的时候甚至不知道自己选择的行业是否正确,为了帮助许多java软件工程师走出困境,下面就是专门针对java软件工程师就业前景进行详细的解析,在了解了相关的情况下,不知道你否还会坚持在软件工程师的行业中继续发展。

java软件工程师就业前景的好坏主要从Java的应用领域来看,Java语言的应用方向主要表现在以下三个方面:

首先是大中型的商业应用,包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站,Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用;

其次是桌面应用,就是常说的C/S应用,主要用来开发运行于不同的操作系统上的桌面应用程序;

再次是移动领域应用,主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA、机顶盒、汽车通信设备等。

近年来我国信息化发展越来越快,使得全国各地的信息化建设如火如荼,出现了大量的信息化人才尤其是Java软件人才的缺口,而我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握Java软件开发基础技能与知识的软件工程师。

根据2016年11月TIOBE开发语言排行榜宣布的流行开发语言的排名结果,Java仍然高居榜首,在国内的软件开发企业中,Java语言的使用比例也排名第一。

我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。

根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。应该说Java软件工程师的就业机会和前景是非常大的。再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要。前景是非常乐观的。

同时,Java工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。但是,对Java人才需求旺盛的IT企业却很难招聘到合格的Java人员。

其中,最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人需求有较大的差距。因此,计算机专业的大学生欲成为Java工程师,最便捷的一条路就是参加以实战项目为主要教学方法的Java职业技能培训,从而有效地缩短同企业具体用人需求之间的差距。

要使用Java语言胜任企业工作并不容易。比如要成为一名Java架构师,必须精通设计、需求分析、各种开源工具、JavaEE的底层技术;熟悉工作流程、权限框架、门户框架等。而要成为一名Java普通程序员,必须具备基本的J2EE技术(JSP、Servlet、Java语言),SSH(Struts、Spring、Hibernate)框架开发,一定的数据库设计能力和数据库使用经验,熟悉Web开发技术(比如html+css+Javascript,会ajax更好)。

当前世界各地持有JavaProgrammer证书的人员供需差距极大,迫使企业不得不用高薪聘请Java程序员。因此,JavaProgrammer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家,持有JavaProgrammer认证证书的人年薪均在4-10万美金,而在国JavaProgrammer认证的程序员也有极好的工作机会和很高的薪水。

java软件工程师就业前景其实不是一成不变的,而是随着人们的他的需要而变化的,当我们大量需要的时候往往java软件工程师就业前景就会比较明朗,相反的我们不需要了,那么java软件工程师就业前景还会好吗?我们要做的不是看前景的好坏,而是针对自己展开分析。

更多热门文章推荐:

1.2016Java就业前景如何

2.2015年就业前景最好的十大专业

3.数控技术未来就业前景怎么样?

4.2016学习IT的就业前景分析

5.2016年信息管理与信息系统就业前景如何

6.2016年数控技术就业前景怎样?

7.软件工程师的就业前景

8.2015专业就业率前十的排名

9.数控技术专业毕业生就业前景怎么样?

java编程技术 篇6

关键词:java;多线程;socket编程

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30796-01

The Java Multi-threading Mechanism Weaves the Application in the Distance in the Socket

XU Xiao-long

(Dept.of Computer Science,Qufu Normal University,Rizhao 276826,China)

Abstract:This paper discusses the theory and usage of Java multithreading, especially how to use multithreading in socket programming, so that the server can response the requests of many clients at the same time.

Key words:java; multithreading; socket programming

随着分布式系统的兴起,并发多任务技术越来越重要。在现有的基于多线程的操作系统上开发并发多任务程序已成为程序设计的热点。Java是开发网络应用程序的热门技术之一,本文首先分析了Java多线程机制的特性,然后以Windows XP为平台,以JDK6.0为开发环境分析了Java的多线程机制在Socket编程中的应用。

1 线程的特点

以往所开发的程序多数是单线程的,即一个程序只有一条从头至尾的执行路线。然而现实世界的很多过程却需要多条途径同时运行,例如服务器需要同时处理多个客户的请求,多媒体程序需要对多种媒体并发控制等。

线程是指进程中单一顺序的控制流,又称为轻量级进程。每个进程可以启动几个线程,线程是最小的运行单位。操作系统的多任务特性使得线程之间独立运行,但是它们彼此共享存储空间,可能会同时操作同一内存地址。

2 Java对多线程的支持

2.1概述

Java是通过多线程机制来支持多任务和并行处理的,多线程编程是Java语言最重要的特征之一。多线程是指同时存在几个执行体,按几条不同的执行路线共同工作的情况。Java的多线程机制使得编程人员可以很方便地开发出具有多线程功能,能同时处理多个任务的功能强大的应用程序。

Java对多线程的支持表现为两个方面:一是它本身就是一个多线程体系。Java是基于多线程来执行任务的。例如,有若干个系统线程用于必要的“垃圾”回收,自动作存储器管理工作及其它系统维护工作。另外,Java内置了多线程控制机制,从而大大简化了多线程应用程序的开发。Thread类封装了所有有关线程的控制,负责线程的启动、运行、休眠、挂起、恢复、退出和终止等一般性的逻辑控制操作,并可检查线程的状态。除此之外,Thread类也实现了对线程行为的优先级的控制。由于CPU一次只能执行一个线程中的指令,因此对多线程体系而言,必须通过优先级决定线程之间的切换。

2.2线程的创建

Java是面向对象的程序语言,用Java进行程序设计就是设计和使用类,Java提供了Thread类来创建线程,线程就是Thread类或其子类的对象。

Thread thread1=new Thread();

thread1.start();

这样就创建了一个线程,并启动了该线程。启动线程就是启动线程的run()方法,而Thread类中的run()方法没有任何操作语句,所以要使线程实现预定功能,必须定义自己的run()方法。Java中通常有两种方式定义run()方法:

一是通过定义Thread类的子类,在该子类中重写run()方法。Thread子类的实例就是一个线程,启动线程就启动了子类中重写的run()方法。

二是通过实现Runnable接口,在该接口中定义run()方法。

线程被创建后处于待命状态,启动线程就是启动线程的run()方法,这是通过调用线程的start()方法来实现的。

2.3线程的优先级

对于多线程程序,每个线程的重要程度不尽相同,如多个线程在等待处理机时,往往需要优先级高的线程优先抢占到CPU得以执行;又如多个线程交替执行时,希望优先级高的线程得到CPU的时间长一些;这样,高优先级的线程处理的任务效率就高一些。

Java中线程的优先级从低到高以整数1~10表示,共分为10级,设置优先级是通过调用线程对象的setPriority()方法。

2.4线程的同步

线程的异步执行是指线程抢占CPU,不关心其它线程的状态或行为。但是在访问一些共享资源时,这种无序访问会导致无法得到正确的结果。因此当两个或多个线程需要访问同一资源时,它们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,这种方式称为同步。

Java在同步机制中提供了语言级的支持,可以通过对关键代码段使用synchronized关键字修饰来实现针对该代码段的同步操作。

2.5线程间的相互联系

可以利用wait()、notify()及notifyAll()方法发送消息实现线程间的相互联系,在同一时刻只能有一个线程访对象中的同步方法,其它线程被阻塞。通常可以用notify()或notifyAll()方法唤醒其它一个或所有线程。而使用wait()方法来使该线程处于阻塞状态,等待其它的线程用notify()唤醒。

3 多线程在Socket编程中的应用

3.1服务器端的多线程

网上数据交互的主要特点是发生的随机性,即消息的到达不存在任何预示或规律,协作双方无法预知信息到达的时间,所以要防止信息丢失。因此,需要在服务器程序中设置一个循环语句,反复检测输入流中有没有来自客户的数据。以一个简单的例子说

(上接第796页)

明这个问题:客户通过输出流将一个字符串传给服务器,服务器收到后将字符串的所有字母转换为大写,然后通过输出流回送给客户。程序如下:

public static void main(String[] args) throws Exception{

ServerSocket ss = new ServerSocket(PORT);

Socket skt = ss.accept();

DataInputStream dis = new DataInputStream(skt.getInputSream());

DataOutputStream dos = new DataOutputStream(skt.getOutputStream());

while (true) {

String s = dis.readUTF();

if (s!=null)dos.writeUTF(s.toUpperCase()); } }

该程序的一个明显缺陷是只能接收来自一个客户的数据,因为程序会停留在while语句处反复检测,这是服务器程序所不能容忍的。为了能接收来自多个客户的数据,必须采用多线程的方法。

每与一个客户建立连接后,就启动一个线程,让该线程检测输入流中有无数据,便可实现服务器同时响应多个客户的请求。方法如下:

class ServerThread extends Thread{

Socket skt = null;

DataInputStream dis = null;

DataOutputStream dos = null;

ServerThread(Socket skt1){

skt = skt1;

try{

dis = new DataInputStream(skt.getInputStream());

dos = new DataOutputStream(skt.getOutputStream());

}catch(Exception e){} }

public void run(){

while (true){

String s = dis.readUTF();

if (s!=null)dos.writeUTF(s.toUpperCase()); }}}

这样主方法就可以只负责接收客户请求,将每个请求的Socket对象作为参数传递给ServerThread的构造方法,然后将该ServerThread对象启动,便会有一个线程专门负责监听该客户的请求。主方法为:

public static void main(String[] args) throws Exception{

ServerSocket ss = new ServerSocket(PORT);

while (true){

Socket skt = ss.accept();

if (skt!=null)new ServerThread(skt).start();}}

3.2客户端的多线程

客户如果要监听服务器回送的信息,为了防止信息的遗漏,同样需要使用循环语句反复监测输入流:

while (true){

String s =-dis.readUTF();

if (s!=null) System.out.println(s);}

在这种情况下,主程序便会反复执行循环体,无法进行其它工作。如果让一个线程专门负责监听,那么该线程启动后,主程序便可解放出来处理其它事情。线程的写法可以象服务器端一样,写一个Thread的子类,也可以实现Runnable接口。

将多线程应用到Socket程序中后,便实现了客户与服务器的合理通信,既不至于遗漏信息,也不会因为监听而影响程序的其它功能。

4 结束语

本文讨论了Java的多线程机制及其使用,研究了将多线程应用于Socket程序设计的基本模型,在此模型的基础上可以方便的演化出更为复杂的程序,如聊天、远程计算等。本文对多线程及Socket编程的初学者有一定参考价值,也是研究多线程协作、即时响应等问题的基础。

参考文献:

[1]胡雯,赵海廷.JAVA多线程同步问题研究[J].软件导刊,2007,1.

[2]姜景根,李祥.基于Java的多线程并发服务器的设计与应用[J].电脑与信息技术,2007;15(1).

[3]Bruce Eckel.Think in Java[M].北京:机械工业出版社,2002.

java编程技术 篇7

1计算机软件JAVA编程综述

在计算机软件研发领域中, 编写软件程序目前主要采用的编程语言为JAVA, 这一编程语言一经问世, 就凭借自身的优势而广受软件研发领域工作者的高度好评与认可。从实际使用的效果看, JAVA编程语言具备了其他编程语言欠缺的优势、性能和特点, 以VF以及VB这两种编程语言为对比对象, JAVA编程语言呈现出的优势为:一方面, 能够适应当前不同操作系统对软件功能所提出的新要求;另一方面, 其能够基于网络实现软件的编写。在此过程中, VF与VB编程语言过于复杂的劣势凸显, 而基于JAVA编程语言, 整个软件编程工作的开展不仅简单便捷, 且稳定性与安全性也相对较高, 满足了当前用户对软件功能所提出的新要求。

2计算机软件JAVA编程所呈现出的具体优势特点

2.1简单性与独立性

首先, 简单性指的是JAVA编程语言在实际应用过程中简单易操作, 这是基于其是建立在C与C ++编程语言基础上的, 但是在某种程度上是对这两种编程语言的升级与优化, 即使是初学者, 也能够很快掌握这一编程语言。整个编程过程的简单化促使相应编程操作简单方便, 同时以引用替代了指针, 进一步降低了编写难度, 提高了编程的安全可靠性。 此外, JAVA编程语言还具备许多新的功能, 强化了其实用性。 其次, 独立性指的是基于JAVA编程语言相应的平台具备独立性的特点, 在实际应用过程中, 其在一次编译之后就能够运行, 且不需要进行改动, 对硬件设备没有要求。因此, 其能够规避平台环境提出的要求, 只要系统能够支撑JAVA虚拟机, 便能够实现运行, 但是, 一些情况下基于平台本身所存在的差异性, 为了解决代码转换过程中所出现的差别性, 则需要在编译过程中进行微调。

2.2面对对象与可移植性

首先, JAVA编程语言具有面对对象的特点。JAVA采用了一种新的思维模式, 即将各模块搭建于程序上, 然后结合相应的功能需求进行进一步分解, 在此过程中, 通过小模块形式的划分实现编写方案的科学定位, 这就使得在操作上更加简单便捷。其次, 可移植性。通过实践应用表明, 这一编程语言具备了良好的可移植性, 其能够借助Web站点下载应用程序, 且灵活方便, 满足了用户实际使用需求。JAVA编程语言能够促使Web程序灵活运行, 在实际应用过程中, 需要强调的是要根据这一编程语言的要求, 对相应数据类型本身的长度进行规范定位。

2.3安全可靠且灵活易拓展

第一, 安全可靠。这是JAVA编程语言所呈现出的最大优势之一, 该编程语言能够通过加密技术的应用确保软件的安全性与可靠性, 一旦相应显示器出现变化, 则能够利用这一安全技术断开程序对数据的访问, 进而保证数据的安全性与完整性。尤其是在计算机网络环境日加复杂的今天, 网络病毒与木马程序的入侵将直接威胁到计算机软件程序的安全性, 而采用JAVA编程语言则能够为解决这一问题提供技术基础。第二, 灵活可拓展。JAVA编程语言能够在应用过程中不断被创新与优化, 这一做法并不会干扰到原来程序的运行, 因此, 能够借助灵活的编程实现对软件程序的有效拓展。

2.4多线程性

JAVA编程语言多线程性的特点, 能够为实现并行执行奠定基础, 借助相应的同步源语, 能够为实现对共享数据的正确操作奠定基础, 而这一机制能够实现对特定行为的有效操作, 进而为交互性的实现提供技术基础。

3计算机软件JAVA编程所涉及到的关键技术分析

3.1 JAVA.D.C技术

JAVA.D.C技术为实现关联数据的相互访问提供基础, 同时为实现数据库间的连接奠定基础。在实际进行编程时, JAVA编程语言要求相应编程人员在编译程序之后, 根据实际情况进行调试, 进而促使相应数据库间实现连接。基于此, 通过JAVA.D.C技术的应用, 能够为实现对后台数据库的有效管理提供技术保障, 同时, 还能够通过相应数据连接工具的搭建, 确保这一软件程序在实际运行过程中, 具备后台数据支持服务。

3.2 JAVA Annotation与JAVA.Remote Invocation技术

JAVA Annotation技术的应用能够将相应程序语言中的参数、变量等进行关联, 并搭建出相应系统, 这一控制体系本身的稳定性与安全性较高;JAVA.Remote Invocation技术的应用则是实现程序分布式整理的技术基础, 通过调用对象与类别, 为确保整个程序的安全可靠运行奠定基础。从软件程序开发者角度出发, 采用JAVA.Remote Invocation技术的最大优势在于能够实现对信息资源的高度整合, 为确保使用JAVA编程语言的相应程序可靠运行, 保证程序本身的完整性奠定基础。

4 JAVA编程语言在游戏软件平台开发中所呈现出的技术优势分析

当前, 在快节奏的生活氛围下, 计算机游戏平台的搭建无疑能够为用户提供一个休闲放松的有效媒介, 在实际开发游戏软件平台时, 经常使用的编程语言是JAVA, 借助这一编程语言的可移植性, 不仅能够为提高整个游戏设计的效果提供技术基础, 同时, 在移动智能设备实现普及性应用的当下, 能够将游戏转移到手机等智能设备中, 进而使相应的手机与平板用户能够通过该技术享受游戏所带来的轻松与欢乐。

5结语

综上所述, 在网络时代下, 计算机的普及性应用促使用户对计算机软件的性能与功能提出了更高要求, 在此背景下, 对于计算机软件的开发商而言, 就需要科学选择软件编程语言。而应用JAVA编程语言, 则能够借助这一技术的优势降低软件编程工作的复杂度, 并提高软件的安全性与可靠性, 这就能够在满足用户实际使用需求的同时, 提高软件开发的综合效益。

参考文献

[1]朱国兆.计算机软件JAVA编程特点及其技术研究探讨[J].计算机光盘软件与应用, 2014 (16) :59.

[2]张春英.计算机软件JAVA编程特点及技术分析[J].电子制作, 2014 (20) :69.

[3]刘群娣.基于计算机软件开发JAVA编程语言分析[J].信息与电脑 (理论版) , 2015 (22) :60-61.

[4]王晶晶.基于计算机软件开发的JAVA编程语言分析[J].河南科技, 2013 (2) :250-251.

java编程技术 篇8

1 建设内容及实现功能

防灾减灾短信平台应具备有统一规划、多种接入方式、适用性与经济性、扩充性与兼容性、先进性、高可靠性、方便管理与维护等特点。

1.1 接入模式改变

福建移动公司将防灾减灾短信的接入模式由现有的移动梦网模式转换成行业网关模式, 并且在短信后增加【关注天气】的短信签名。短短信是以70个字符作为一条信息的限制字数, 在增加短信签名的6个字符后, 只剩下64个字符, 已无法满足日常业务需要, 这就必须将原有的短短信模式升级为长短信模式。

1.2 用户数据库管理

原先移动定制用户必须通过MISC网关, 等待运营商服务器的同步确认, 才能将名单添加到数据库服务器中, 并且有操作步骤繁琐、等待同步时间较长、时间无法控制等不足之处。改为移动行业网关后, 移动运营商直接给防灾减灾短信平台 (10628890) 开设白名单绿色通道, 将实现不通过MISC网关, 添加后的用户名单直接建立数据库, 存在服务中心机房服务器中, 无需再与运营商数据库服务器同步, 这样更有利于我中心对短信平台用户数据库的管理和维护。

1.3 短短信的弊端

现有的70个字符的短短信在遇灾害性天气或复杂天气状况时, 需发送灾害情况、提示性语言、温馨提示等气象信息。70个字符的限制已逐渐无法满足文字表达内容的需要。为了继续满足未来业务需求, 该平台将对 (电信、移动、联通) 三家运营商的短短信模式更新建设为长短信模式。

2 SGIP、CMPP协议开发技术路线

2.1 SGIP协议长短信

将tlv字段TP udhi设置为0x01, 代表消息内容中包含长短信头。TLV字段说明:TLV是可选参Tag, Length, Value的缩写, 其中Tag是2个字节, 表示字段的标签, 说明是啥值;Length是2个字节, 表示后面具体值的长度;Value可变长度, 长度为Length, 字段的内容。TP_udhi的Tag为0x0002, Length为0x0001, Value为0x01。

2.2 消息内容增加一共有6个字节的用户数据包头UDH。

其中, 字节一为包头长度, 应固定填写0x05;字节二为包头类型标识, 应固定填写0x00, 代表长短信;字节三为子包长度, 应固定填写0x03, 代表后三个字节的长度;字节四为长消息参考号, 每一个SP发送至每一用户的参考号都是不同的, 由0开始时, 每次加1, 最大可加到255, 这就可以实现在同一个终端识别出同一个SP消息的不同长短信;字节五为一条长消息的总消息数, 通常为1~255, 一般应取值>2;字节六为一条消息在长消息中所处的1~255的位置或序号, 其中依次为1、2, 最后一条为第四字节的值。

3 CMPP3.0协议长短信

CMPP-SUBMIT消息定义 (SP?SMG) 字段名?字节数?属性?描述Msg Id 8 Unsigned Integer信息标识。

Pk total 1 Unsigned Integer相同Msg Id的信息总条数以及Pk number 1 Unsigned Integer相同Msg Id的信息序号均由1开始;当Registered Delivery 1 Unsigned Integer要求返回状态确认时, 其中“0”为不需要;“1”为需要。

Msg level 1 Unsigned Integer信息级别, Service Id 10Octet String业务标识, 为数字、符号及字母的组合, Fee User Type 1 Unsigned Integer计费用户类型字段分别为:“0”表示对目的终端MSISDN计费;“1”表示对源终端MSISDN计费;“2”表示对SP计费;“3”表示本字段无效。计费用户可参见Fee terminal Id字段, 其中Fee terminal Id32 Octer String为被计费用户的号码, Fee terminal type 1 Un signed Integer被计费用户号码类型:其中0为真实号码;1代表伪码;当Fee User Type为3时表示该值有效, 为0、1、2时均无任何意义。TP pld 1 Unsigned Integer GSM为协议类型, TP udhi 1 Unsigned Integer。

4 总结

升级建设完成的防灾减灾短信平台, 实现了三家运营商 (移动、联通、电信) 的长短信拆分规则, 保证长短信的发送, 并在不通过MISC网关平台管理定制关系的条件下, 无需与运营商服务器同步, 添加白名单用户到数据库服务器中, 便于日常的管理与维护。此次升级更新后在功能上新增了批量定制用户导入、导出功能, 这就较完整地完成了防灾减灾短信平台的升级建设工作, 满足了日常业务需求, 不断提高气象服务能力, 为气象信息能及时、准确地发送提供了技术支持和保障。

摘要:为满足日常业务需求, 解决防灾减灾短信平台发送长短信及用户数据库管理等问题, 基于C/C++, JAVA编程技术的防灾减灾短信平台, 实现三家运营商 (电信、移动、联通) 长短信功能的统一发送, 为气象资讯能及时、准确地送达提供了技术支持和保障。

关键词:防灾减灾短信平台,长短信,气象服务能力

参考文献

[1]宋健, 王新丽.SGIP短信协议机制及其在华为在信网关的应用[J].中小企业管理与科技 (上旬刊) , 2011 (9) .

[2]林周, 汤瑞财, 龙卉.基于CMPP3.0的长短信识别与合并技术[J].实验科学与技术, 2007 (6) .

Java网络编程的研究 篇9

Internet技术的发展促进了Java语言的发展,网络编程是Java语言的重要功能,Java系统的API中按类的形式提供了3种不同层次的网络技术机制,用URL访问网络资源的类,利用Socket(套接字)通信的类以及Datagram(数据报)类,这些网络功能都定义在Java.NET程序包中。网络应用是Java语言取得成功的领域之一,Java现在已经成为Internet上最流行的一种编程语言。

Socket类是基于客户/服务器模式而实现某些特殊应用的,其网络通信过程是利用TCP/IP协议中的传输层接口Socket来实现的。Socket就是这样的编号,它是作为网络上和另一个应用程序通信的连接句柄,应用程序通过系统和某个端口建立连接后,传输层传给该端口的数据都会被相应的应用程序所接收,同样应用程序发出给传输层的数据都从该端口输出。那么在TCP/IP协议中,对端口的操作类似于一般的I/O操作,进程获得一个端口就相当于获取本地唯一的一个I/O文件。

2 基于Socket的Java网络编程

2.1 Socket通信

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。

在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

2.2 一般过程

使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下4个基本的步骤:

(1)创建Socket。

(2)打开连接到Socket的输入/出流。

(3)按照一定的协议对Socket进行读/写操作。

(4)关闭Socket。

2.3 创建Socket

Java在包Java.NET中提供了两个类Socket和Server Socket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:

Socket(Inet Address address,int port);

Socket(Inet Address address,int port,boolean stream);

Socket(String host,int prot);

Socket(String host,int prot,boolean stream);

Socket(Socket Impl impl)

Socket(String host,int port,Inet Address local Addr,int local Port)

Socket(Inet Address address,int port,Inet Address local Addr,int local Port)

Server Socket(int port);

Server Socket(int port,int backlog);

其中Address、Host和Port分别是双向连接中另一方的IP地址、主机名和端口号,Stream指明Socket是流Socket还是数据报Socket,local Port表示本地主机的端口号,local Addr和bind Addr是本地机器的地址(Server Socket的主机地址),impl是Socket的父类,既可以用来创建Server Socket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。例如:

Socket client=new Socket("127.0.01.",80);

Server Socket server=new Server Socket(80);

注意,在选择端口时,必须小心,每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23,所以在选择端口号时,最好选择一个大于1023的数以防止发生冲突。

在创建Socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或Server Socket时必须捕获或抛出例外。

3 Client/Server程序设计

下面给出一个用Socket实现的客户和服务器交互的典型的C/S结构的演示程序,读者通过仔细阅读该程序,会对前面所讨论的各个概念有更深刻的认识。

例:客户端程序

4 结语

Socket实质上提供了通信的端点,即从Socket发送数据和从Socket接收数据,客户程序可以访问Socket写请求,服务器将处理此请求,然后通过Socket将结果返回用户。正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,显示出Java强大的网络编程功能。

摘要:针对不同层次的网络通信,Java提供的网络功能有4大类:URL、InetAddress、Socket、Datagram。以基于Socket的Java网络编程为例,来探讨Java网络编程,具有一定的参考价值。

关键词:Java,网络编程,研究

参考文献

[1]吴凤祥,孙新胜,苑迎春.Java中基于TCP/IP的Socket编程[J].河北农业大学学报,2004,(02):123-126.

[2]王之怡.基于C/S结构的Java网络数据库编程[J].电脑编程技巧与维护,2003,(06):114-117.

[3]闵小玲.基于Java语言Socket通信的实现方法[J].黄石高等专科学校学报,2004,(04):105-106.

[4]赵文清,姜波.基于Socket的Java语言网络通讯机制和程序设计[J].信息技术,2002,(07):136-140.

Java面向对象编程的教学思路 篇10

关键词:Java,面向对象编程,教学方法

Java是当前最流行的编程语言之一, 几乎所有的计算机专业学生都要学。通常, 学生先接触的编程语言是C语言, 而Java在语法上又与C语言非常类似, 因此, 教学的重点应放在面向对象编程的概念和技术上, 然而, 在刚接触面向对象编程时, 学生一般都很难理解OOP的概念。原因是教师过分强调Java语言规范, 却没有告诉学生OOP编程的理念和原则。这极大地挫伤了学生学习的兴趣, 更谈不上对能力的培养。因此, 笔者认为教学重点应放在介绍面向对象编程的基本思想以及Java语言与此相关的特征上。

1 Java编程基础

(1) 简单的Java应用程序;课程开始时, 教师应演示简单示例让学生了解Java程序。由于学生熟悉C语言, 示例应与其类似, 使学生快速地了解Java编程。将“Hello World”程序作为第一个示例使用, 学生就很容易了解Java程序和C程序之间的异同点。

(2) 简单的数据类型和数组;Java的语法类似于C语言, 这对于熟悉C的学生有利有弊。学生要区分C和Java语法和句法上的差异, 教师也必须提醒学生两者只是类似, 如两者的布尔类型和数组类型就很容易混淆。

(1) 布尔类型:C语言中, 经常会使用1和0来表示真假, 而Java使用布尔变量来表示。因此, while (1) 在C语言中是合法的, 在Java里就不是了, 这是Java初学者常见的一种错误。

(2) 数组类型:数组在Java中被视为对象。教师可以将数组作为第一个例子来演示如何使用Java对象, 但需要强调数组对象必须先声明后使用, 而C语言数组是可以先使用后声明的。

(3) 使用预定义的Java类。

教学目标:

*让学生学会使用Java类库中强大的预定义类;

*引入Java中一些重要的概念和技术, 如构造函数、对象、方法重载等。

讲解中, 笔者选择了两种典型的类: (1) String类:String类或类型几乎在任何编程语言中都会用到。Java也提供了该类, 教师可通过例子来演示调用构造函数创建String对象, 调用实例方法, 访问成员变量等等。 (2) Math类:学生经常会用到C语言的数学函数, 在Java中, 他们同样也要用到这些功能。为此, Java提供了Math类。由于Math类所有的成员都是静态的, 教师可以通过例子来说明静态方法的调用, 类静态成员的访问, 方法重载等等。

2 定义类

(1) 从C结构到Java类;带有实例变量的Java类和C语言的结构类型非常类似, 但是, 两者虽然在形式上类似, 性质却完全不同。例1中, 变量id是创建Rectangle对象的序号, 静态成员变量next Id用于跟踪创建的对象, 即每创建一个对象, next Id值将加1。

例1.class Rectangle{

double length, width;

int id;

如果消除静态变量, Rectangle类就非常类似于C结构。不过, 两者的区别也显而易见。首先, 类通过调用构造函数创建新对象, 而C结构没有构造函数。其次, 类的静态成员变量在对象创建之前就初始化, 由该类的所有对象所共享, 而C结构没有此功能。在这, 需要通过例子向学生说明实例变量和类变量之间的区别, 以及它们的使用。

(2) 定义构造函数。

构造函数的作用是创建对象并初始化。不过, 学生可能认为没有必要为类提供构造函数, 他们可以用例2来创建新对象:

在此, 教师可展开写构造函数的原因:如果没有自定义的构造函数, 那么创建一个新对象必须要写五条语句。比如, 用户要创建1000个对象, 就不得不写5000条语句。而如果提供了构造函数, 就只需1000条调用构造函数的语句。这是简化代码的一种方法, 同时也反映了简单实用的编程理念。在此可提醒学生在平时注意消除重复代码, 它的好处是: (1) 避免多次调试同样的代码; (2) 简化程序, 使程序清楚且便于阅读。

(3) 定义方法。

Java中有两种成员方法:类方法和实例方法。它们的区别:类方法可由类中的任何成员方法调用, 但是类方法不能直接调用任何实例方法。笔者教学发现, 不少学生不愿意使用成员方法, 教师就必须点出编写成员方法的理由: (1) 消除重复代码, (2) 隐藏程序执行细节, 使程序更安全。

(4) 访问控制符与封装。

Java对方法有public、private、protected、private protected四个访问控制符, 教师可分别用例子来说明这四个访问级别的区别。另外, 教师还必须向学生充分解释控制访问的理由。例如, 如果Rectangle类的长度和宽度都是public访问级别, 变量值可以自由修改。因此, 输入的值就有负值的危险。如果其访问级别是private, 别的类就看不到两个变量, 它们只能由同一类的成员来进行修改。另外, 还要编写方法来核实数据合法性后再将其赋给成员变量, 以保护成员变量, 避免非法操作。只有让学生了解了控制访问的原因, 他们才能更积极主动地来学习有关访问控制的内容。

3 结语

回顾以上讨论的教学思路。开始, 我们让学生写一个类似C程序的Java程序。这个阶段的重点是使学生熟悉Java语言的一些重要概念。接着, 讨论了如何定义类, 在这一阶段, 我们强调了构造函数的优势, 类方法和控制访问的原因, 并将面对对象编程的思想贯穿始末。

根据这条思路, 逐步讲授面向对象编程的概念和原则。我们不止要告诉学生怎么做, 更要告诉他们为什么这样做。只有这样, 学生才会更积极地学习Java以及潜在的面向对象编程思想, 并逐渐突破从面向过程编程到面向对象编程的障碍。

参考文献

[1]B.Joshua, Effective Java[J].Addison-Wesley, 2001.

[2]Bruce Eckel[著], 陈昊鹏[译], Java编程思想[M].机械工业出版社, 2007.

[3]林信良.Java学习笔记[M].清华大学出版社, 2007.

Java代码混淆技术研究 篇11

关键词:混淆技术;Java;编程;算法

中图分类号:TP312 文献标识码:A 文章编号:1674-7712 (2012) 18-0038-01

一、前言

Java作为一种新一代的编程语言,其因编程简单、跨平台性可操作性强被许多的开发人员和公司喜爱,而且如今已经成为应用程序的主流开发软件。然而,Java编译器在编译时是将代码引用到的变量和方法符号保留在字节码文件中,并且这些符号都有语义信息,因此使得开发的程序很容易被反编译,导致软件被破解。最终将使得开发者的知识产权受到侵害。为了保护开发者的权益,代码混淆技术变应运而生。

二、混淆技术的发展

早在1997年Collberg便开始了对代码混淆的研究,在他发表的文章中提出了代码混淆变换的各种类型,他将其分为四类:代码外形混淆、控制命令混淆、内部数据混淆以及预防混淆。随后Kelly等人构造了一种用来实现构造代码的混淆算法机制。在国内,近些年了也有一些学者逐渐意识到了代码混淆技术在进行程序编写中的重要性,大量研究之后取得了较大的成果。比较有代表的有李永祥的多分语句控制迷惑技术,李长春的执行重整混淆算法等。由于混淆技术具有非常重要的软件保护作用,相信未来肯定会有更多的人和组织加入到代码混淆技术的相关研究课题中来。

三、混淆技术介绍

(一)混淆变换原理

作为一种非常实用的软件保护策略,代码混淆技术的基本思想是将应用程序在保持语句含义不变的前提下实现P到P’的变换。此变换中必须满足条件:P‘和P具有相同的运行结果;若P‘出错终止或终止失败,P也必须出错地终止或终止失败;P‘产生与P一样的输出。两个程序唯一不同的只是P‘比P更难去进行反编译,并且P‘可读性差以及相关工具难以解析。因此经过这种变换可以到达混淆的目的,使软件不易被攻击。

(二)混淆的应用领域

代码混淆的应用范围很广,归纳起来主要有一下几种领域:⑴分布式计算和软件保护;⑵法保护和DRM;⑶同形加密;

(三)混淆的分类

代码混淆技术根据混淆对象的不同可以分为四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆。

1.代码外形混淆。Java混淆器使用到的混淆方法中代码外形混淆最为典型,该算法可以将Java所有源代码中包含的类的功能隐藏。如果最初的格式信息被除去后代码将不能恢复,因此称这种混淆为单向变换。程序经过这种变换后时间和空间复杂度不会受影响,因为它并没有额外执行代价。

代码外形混淆主要使用的技术有删除(删除程序和中的注释、调试信息、未被调用的方法和類等)和改名(程序中的变量名、常量名、类名、方法名等)。此变换可以使程序的理解变难。

2.控制命令混淆。控制命令混淆能增加程序的复杂度和程序的反编译时间,它是通过改变程序的判断条件或添加可控判断条件以及对程序的结构和流程进行调整来实现的。常常用到的控制命令混淆主要有排序、聚集和计算变换。

3.内部数据混淆。内部数据混淆技术将会利用数据流中的难点问题,向程序中引入使程序精度降低或难度增加的因素,进而可以影响反编译器对程序的分析结果。内部数据混淆只会变换代码中的数据结构,而不修改软件代码。

进行内部数据混淆的主要方法有四种:变量分裂与变量合并、数据结构变换、静态数据动态生成、类继承转换。

4.预防变换。预防变换是利用某些专用反汇编工具的弱点而设计的。具体混淆可以分为针对特定目标实施的预防变换或者是依据已知的反编译算法实现的混淆。

5.四种混淆技术的分析和比较。代码外形混淆使攻击者解读程序造成不便,同时也能针对反编译工具的算法使之反编译难以实施。内部数据混淆改变逻辑变量。控制命令混淆使程序变得更加复杂从而增强程序的抵抗性能。预防混淆较多时候都是具有一定的针对性。内部数据混淆和控制混淆都会在增加程序复杂度的同时造成程序执行效率的下降,而代码外形混淆则不会影响执行效率。

四、标示符重命名混淆算法

标示符重命名混淆属于代码外形混淆的范畴。它是将字节码文件中的一些类名、接口名、方法名等替换为其他无意义的名字。这并没有造成程序的额外开销,抗攻击能力也不强。

重命名是因为进行内部数据混淆和控制混淆时都会增加程序的开销,而这并不是我们想要的。有时候我们经常需要一种可以抵抗攻击并且不会造成程序执行效率下降的算法,而重命名混淆正是这样的。当一些名字被毫无意义的字符替换后,攻击者很难从中读出该名字所代表的意义,这便使得攻击者在反编译是造成了困难。

当程序中一个实体被重命名后,所有与其相关的内容必须更新,否则会引起运行出错。但是有一些是不能被重命名的。这便有了代码混淆范围的提出。以下三种标示符是不在范围内的:(1)子类中一个超类或接口中抽象方法的实体方法;(2)超类中继承方法的重写;(3)特殊属性明确规定不可进行替换。

标示符重名算法可以分为四种:静态方法重写、替换非法提示符、无关联方法重载、部分标识符滥用。

五、算法分析

衡量一个混淆算法性能好坏的重要指标是对程序执行开销的影响。内部数据混淆和控制命令混淆都增加了程序的二外执行开销从而影响了程序的运行效率。重命名混淆只是将名字替换,很多时候都会将名字缩短,使文件变得更小,不会造成执行效率的下降,同时也使攻击者将花费更长的时间来理解和反编译程序。

六、总结

代码混淆技术是时下最常用的,同时也是最有效的保护Java软件的方法,新型的混淆算法一定会随着技术的发展而被发现。虽然代码混淆技术在一定程度上保护了软件的安全以及开发者的权益,但只有我们杜绝使用盗版软件同时不去侵犯他人的知识产权才能切实的保护好开发者的权益。

参考文献:

[1]魏会生.基于JAVA类文件保护的探讨[J].工会博览·理论研究,2011,3:25-26.

[2]魏衍君,王应战.Java语言混淆器模型研究[J].科技信息,2012,4:61-62.

Java可视化编程技巧探究 篇12

Java作为主流的编程语言,被广泛地应用于各种编程应用中,而且不少初学者都坚持使用记事本学习Java语言,这是个非常良好的习惯。但是在学习了一段时间,特别是学习了Java图形化用户界面(Grapical User Interface,GUI)应用程序后,大部分人都会有这种困惑:难道开发Java图形界面程序也必须一个一个控件地敲代码吗?能否使用类似窗口资源编辑器的工具,开发Java GUI程序呢?答案是肯定的,E-clipse旗下的Visual Editor图形用户界面开发工具就可以实现。下面就以学生信息管理系统为例,对Visual Editor的使用技巧进行探讨。

2 用VE开发学生信息管理系统的界面

设计的学生信息管理系统是一个单机应用程序,该系统具备查看所有学生信息,提供检测新增学生信息是否正确,以及通过学号查询、增加和删除学生信息的功能。

Visual Editor在Eclipse中的安装在这里不再赘述,请读者在网上搜索相关资料,仅讨论VE的使用技巧。

2.1 创建Java类

在Eclipse中新建一个Java项目,如“学生信息管理”,选择快捷菜单中“新建”→“Visual Class”命令,打开“New Java Visual Class”窗口,如图1所示。在“包”栏输入包名,如“student”;在“名称”栏输入类名,如“StudentShell”;在“Style”列表框中选择“SWT”→“Shell”命令;选中“public static void main(String[]args)”复选框,单击“完成”按钮后,一个含有GUI程序界面以及代码的编辑器窗口就被打开了。生成的代码清晰明了,比手工输入节省了很多时间。

2.2 添加组件

鼠标右键单击Shell窗口的空白处,选择“Set Layout”→“null”命令,此时就可以在Shell窗口中任意拖拽控件了。在Palette面板中,展开SWT Controls菜单面板,按照图2样式,将Label、Text、Button和Combo控件依次添加至Shell窗口中,并调整适当的大小和位置,同时也可在属性窗口中设置控件的大小、字体、位置和样式等多种属性。

主界面中,“完成”按钮实现在下方空白处显示上方输入的学生信息;“清空”按钮可以清除空白处的学生信息;“查询”、“添加”、“删除”按钮分别激活其对应的窗口;“关于”按钮则是本款软件的版本及作者信息。

按钮的事件代码添加方法为,鼠标右键单击Button的任意位置,在快捷菜单中选择“Events”→“widgetSelected”命令。以上操作产生的代码如下:

在注释行的位置添加相应的命令以实现需要的功能。

3 用VE为学生信息管理系统连接数据库

信息管理少不了数据库的支持,本例可在学生信息管理系统的主界面上,实时地为用户显示需要的学生信息。

3.1 添加表格组件

在Shell窗口中添加一个Table控件,调整其大小后,再在Table中添加6个Table Column控件,然后设置表格项的text属性。

3.2 连接数据库

本例采用Access 2003作为后台数据库,使用桥连的方式连接数据库。其连接的实现在自定义方法“刷新学生信息”中,其代码和其他Java应用程序雷同,这里就不再赘述。数据库连接成功之后,在主界面上会实时显示学生信息。

4 用VE为学生信息管理系统增添功能

为使界面整洁,功能明确。本例将学生信息管理系统的查询、增加和删除等功能,从主界面中分离出来,在项目中增添了功能对应的类。实现方法和主界面类似,只需要将对应功能中main()方法的相关代码删除即可。需删除代码如下:

查询功能的界面如图3所示,因界面相似,其他功能的界面图不再展示。

5 结语

可视化编程环境对于程序员来说具有很重要的意义,它能够提供拖放按钮、文本框和菜单等基本应用,使程序员摆脱纯手工地编写控件大小、位置和文本等信息,不仅为编程人员提供了友好的界面,极大地减少了开发工作量,提高了工作效率,也为初学者提供了简单易上手的操作环境。

以学生信息管理系统实例,非常适合初学者自学或者教师课程设计使用,在此基础上还可以添加用户登录、打印学生信息等功能。通过此实例的练习,能够将面向对象程序的基础知识技能化,将图形界面设计技能实例化,将Java高级编程技术项目化,进而强化知识点、增强学习热情,使学习者的能力有质的飞跃。

参考文献

[1]汪远征,周巧婷.Java语言程序设计.北京:机械工业出版社,2010.

[2]袁小华,王令群,张书台.可视化实验平台在高校Java程序设计教学中的应用.计算机教育,2012,(2):99-102.

上一篇:信仰与企业家精神下一篇:MOOCs背景