java编程习题(精选8篇)
1.java编程习题 篇一
1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim.equals(“”))
return null;
StringTokenizer commaToker = new StringTokenizer(source,“,”);
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma(“5,8,7,4,3,9,1”);
int[] ii = new int[s.length];
for(int i = 0; i
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
2.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半 个”。
代码:
public static boolean isLetter(char c){
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals(“”)|| len<1){
return “”;
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(“”+ subString(“我ABC汉DEF”,6));
}
3、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中选择一个元素作为m I d d l e,该元素为支点把余下的元素分割为两段left 和r I g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排序方法对right 进行排序所得结果为l e f t + m I d d l e + r I g h t
//以下为java程序实现的快速排序算法:
public static void sort(int[] data) {
quickSort(data,0,data.length-1);
}
public static void quickSort(int[] data,int low,int high){
int pivotIndex=(low+high)/2;
swap(data,pivotIndex,high);
int k=partition(data,low-1,high,data[high]);
swap(data,k,high);
if ((k-low)>1) partition(data,low,k-1);
if ((high-k)>1) partition(data,k+1,high);
}
public static int partition(int[] data int low,int high, int pivot ){
do {
while (data[++low]
while (high!=0 && data[--high]>pivot);
swap(data,low,high);
}
while (low
swap(data,low,high);
return low;
}
public static void swap(int[] data int low,int high){
int tmp=data[low];
data[low]=data[high];
data[high]=tmp;
}
public static void main(String[] args){
int[] data = new int[]{89,32,425,32,78,1,53,92};
sort(data);
}
4.试用递归的方法写一下计算菲波那契数列的通项f(n),已知f1=1,f2=1,以后每项都是前两项的和。
..............
public static long fibonacci(long m){
if (m==0 || m==1) return m;
else return fibonacci(m-1)+fibonacci(m-2);
}
5. 写一个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的。
一般认为第一种形式要更加安全些
6、创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所实现的方法名(华为笔试最后一道编程)
import java.lang.reflect.*;
public class Test{
public static void test(Object obj){
Class clazz=obj.getClass();
//System.out.println(“类名:”+clazz.getName());
Method[] ms=clazz.getDeclaredMethods();
long len=Array.getLength(ms);
for(int i=0;i
System.out.println(“类名:”+clazz.getName()+“方法名:”+ms[i].getName());
}
}
class A{
public void b(){}
public void c(){}
public void d(){}
public void e(){}
}
public static void main(String[] args){
Test t=new Test();
Test.A a=t.new A();
test(a);
}
}
7、假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = null;
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
StringTokenizer st = new StringTokenizer(s);
String s1 = st.nextToken();
String s2 = st.nextToken();
byte[] sa1 = s1.getBytes();
byte[] sb2 = s2.getBytes();
Arrays.sort(sa1);
Arrays.sort(sb2);
String ss1 = new String(sa1);
String ss2 = new String(sb2);
if(ss1.equals(ss2))
System.out.println(“equal”);
else
System.out.println(“not equal”);
8、给你一组字符串如:iu7i8hy4jnb2,让你编程输出里面的数字:7842
用正规表达式:“iu7i8hy4jnb2”.replaceAll(“[^d]”,“”);
9、给你一组字符串让你把它倒叙输出
public static String flashBack(String origin) {
String result = “”;
for (int i = origin.length(); i >0; i--) {
String tmp = origin.substring(i - 1, i);
result += tmp;
}
return result;
}
10、给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
public void fun4() {
int[] a = { 4, 1, 2, 4, 5, 1, 1, 1, 5, 1, 3, 4, 5 };
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + “ ”);
}
System.out.println();
int maxNumber = a[a.length - 1], maxCount = 1;
int curNumber = a[a.length - 1], curCount = 1;
for (int i = a.length - 1; i >0; i--) {
curNumber = a[i];
if (a[i] == a[i - 1]) {
curCount++;
} else {
System.out.println(“i=” + i + “,curCount=” + curCount+ “,maxCount=” + maxCount + “,maxNumber=” + maxNumber);
if (curCount >maxCount) {
maxCount = curCount;
maxNumber = curNumber;
}
curCount = 1;
}
}
if (curCount >maxCount) {
maxCount = curCount;
//maxNumber = curNumber;
}
System.out.println(“curCount=” + curCount + “,maxCount=” + maxCount + “,maxNumber=” + maxNumber);
}
11、求两个数的公约数,M,N
int divisor =1;
for (int i = 2; i <= b; i++) {
if(a%i==0 && b%i==0){
divisor = i;
}
}
System.out.println(a+“和”+b+“的最大公约数是:”+divisor);
}
12、实现数组复制
public void fun8(){
int[] a = {1,2,3,4,56,7,8};
int[] b = (int[])a.clone();
Conica.print(a);
Conica.print(b);
b[0]=100;
Conica.print(a);
Conica.print(b);
}
13、冒泡排序的实现
public void fun9(){
int[] a = {1,5,2,6,8,74,1,25,69,8};
Conica.print(a);
for(int i=0; i
for(int j=0; j
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
Conica.print(a);
}
14、编程显示某一文件目录下的文件名
public void fun10(){
File file = new File(“G:�3月份”);
if(file.exists()){
if(file.isDirectory()){
String[] files = file.list();
Conica.println(files);
}
}
}
15、从键盘输入4个十进制数字字符,将其转换为4位时间之数并显示出来
16、编程实现统计文本文件中某个单词的出现频率,并输出统计结果
用HashMap来解决
假设单词不存在跨行的,每个单词用,. ;分割
public static void countNum() throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(“c://file.txt”));
Map map = new HashMap();
for (String s = br.readLine(); s != null; s = br.readLine()) {
StringTokenizer st = new StringTokenizer(s, “,. ;”);
while (st.hasMoreTokens()) {
String temp = st.nextToken();
if (map.containsKey(temp)) {
map.put(temp, new Integer((Integer)map.get(temp) + 1));
} else {
map.put(temp, new Integer(1));
}
}
}
for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey() + “-->” + entry.getValue()
+ “times”);
}
} finally {
br.close();
}
}
17、编程模仿DOS下的dir命令,列出某个目录下的内容
18、编程说明String和StringBuffer字符串的区别
19、编程计算N!的程序,一个使用递归方法,一个不用递归方法
递归 :
long fuction(int n){
if (n==0) return 1;
else
return n* fuction(n-1);
}
不递 :
long s=1;
for(int i=2;i<=n;i++)
{
s*=i;
}
20、编程实现ASCII码和Unicode码之间的转换
21.用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: “4 ”不能在第三位, “3 ”与 “5 ”不能相连.
此题具体算法及程序可参考:
topic.csdn.net/u/0114/14/1170e023-e8f0-4331-8bd8-516c6f1e40da.html
22。一个字符串中可能包含a~z中的多个字符,如有重复,如String data=“aavzcadfdsfsdhshgWasdfasdf”,求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class FindRepeatChar {
public static void doString(String strInput) {
char[] chars = strInput.toCharArray();
ArrayList lists = new ArrayList();
TreeSet set = new TreeSet();
for (int i = 0; i < chars.length; i++) {
lists.add(String.valueOf(chars[i]));
set.add(String.valueOf(chars[i]));
}
System.out.println(set);
Collections.sort(lists);
System.out.println(lists);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < lists.size(); i++) {
sb.append(lists.get(i));
}
strInput = sb.toString();
System.out.println(strInput);
int max = 0;
String maxString = “”;
ArrayList maxList = new ArrayList();
for (Iterator its = set.iterator(); its.hasNext();) {
String s = (String) its.next();
int begin = strInput.indexOf(os);
int end = strInput.lastIndexOf(os);
int value = end - begin + 1;
if (value >max && value >1) {
max = value;
maxString = os;
maxList.add(os);
} else if (value == max) {
maxList.add(os);
}
}
int index = 0;
for (int i = 0; i < maxList.size(); i++) {
if (maxList.get(i).equals(maxString)) {
index = i;
break;
}
}
System.out.println(“出现最多的字符为:”);
for (int i = 0; i < maxList.size(); i++) {
System.out.println(maxList.get(i) + “”);
}
System.out.println();
System.out.println(“出现最多的次数为:” + max);
}
public static void main(String[] args) {
String strInput = new String(“aavzcadfdsfsdhshgWasdfasdf”);
doString(strInput);
}
}
23.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
package test.money;
import java.text.NumberFormat;
import java.util.HashMap;
public class SimpleMoneyFormat {
public static final String EMPTY = “”;
public static final String ZERO = “零”;
public static final String NE = “壹”;
public static final String TWO = “贰”;
public static final String THREE = “叁”;
public static final String FOUR = “肆”;
public static final String FIVE = “伍”;
public static final String SIX = “陆”;
public static final String SEVEN = “柒”;
public static final String EIGHT = “捌”;
public static final String NINE = “玖”;
public static final String TEN = “拾”;
public static final String HUNDRED = “佰”;
public static final String THOUSAND = “仟”;
public static final String TEN_THOUSAND = “万”;
public static final String HUNDRED_MILLION = “亿”;
public static final String YUAN = “元”;
public static final String JIAO = “角”;
public static final String FEN = “分”;
public static final String DOT = “.”;
private static SimpleMoneyFormat formatter = null;
private HashMap chineseNumberMap = new HashMap();
private HashMap chineseMoneyPattern = new HashMap();
private NumberFormat numberFormat = NumberFormat.getInstance();
private SimpleMoneyFormat() {
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setGroupingUsed(false);
chineseNumberMap.put(“0”, ZERO);
chineseNumberMap.put(“1”, ONE);
chineseNumberMap.put(“2”, TWO);
chineseNumberMap.put(“3”, THREE);
chineseNumberMap.put(“4”, FOUR);
chineseNumberMap.put(“5”, FIVE);
chineseNumberMap.put(“6”, SIX);
chineseNumberMap.put(“7”, SEVEN);
chineseNumberMap.put(“8”, EIGHT);
chineseNumberMap.put(“9”, NINE);
chineseNumberMap.put(DOT, DOT);
chineseMoneyPattern.put(“1”, TEN);
chineseMoneyPattern.put(“2”, HUNDRED);
chineseMoneyPattern.put(“3”, THOUSAND);
chineseMoneyPattern.put(“4”, TEN_THOUSAND);
chineseMoneyPattern.put(“5”, TEN);
chineseMoneyPattern.put(“6”, HUNDRED);
chineseMoneyPattern.put(“7”, THOUSAND);
chineseMoneyPattern.put(“8”, HUNDRED_MILLION);
}
public synchronized static SimpleMoneyFormat getInstance() {
if (formatter == null)
formatter = new SimpleMoneyFormat();
return formatter;
}
public String format(String moneyStr) {
checkPrecision(moneyStr);
String result;
result = convertToChineseNumber(moneyStr);
result = addUnitsToChineseMoneyString(result);
return result;
}
public String format(double moneyDouble) {
return format(numberFormat.format(moneyDouble));
}
public String format(int moneyInt) {
return format(numberFormat.format(moneyInt));
}
public String format(long moneyLong) {
return format(numberFormat.format(moneyLong));
}
public String format(Number moneyNum) {
return format(numberFormat.format(moneyNum));
}
private String convertToChineseNumber(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer();
for (int i = 0; i < moneyStr.length(); i++) {//123363
cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(
i, i + 1)));
}
// 拾佰仟万亿等都是汉字里面才有的单位,加上它们
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
int moneyPatternCursor = 1;
for (int i = indexOfDot - 1; i >0; i--) {
cMoneyStringBuffer.(i, chineseMoneyPattern.get(EMPTY
+ moneyPatternCursor));
moneyPatternCursor = moneyPatternCursor == 8 ? 1
: moneyPatternCursor + 1;
}
String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer
.indexOf(“.”));
cMoneyStringBuffer.(cMoneyStringBuffer.indexOf(“.”),
cMoneyStringBuffer.length());
while (cMoneyStringBuffer.indexOf(“零拾”) != -1) {//inclusive. exclusive.
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零拾”),
cMoneyStringBuffer.indexOf(“零拾”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零佰”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零佰”),
cMoneyStringBuffer.indexOf(“零佰”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零仟”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零仟”),
cMoneyStringBuffer.indexOf(“零仟”) + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf(“零万”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零万”),
cMoneyStringBuffer.indexOf(“零万”) + 2, TEN_THOUSAND);
}
while (cMoneyStringBuffer.indexOf(“零亿”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零亿”),
cMoneyStringBuffer.indexOf(“零亿”) + 2, HUNDRED_MILLION);
}
while (cMoneyStringBuffer.indexOf(“零零”) != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零零”),
cMoneyStringBuffer.indexOf(“零零”) + 2, ZERO);
}
if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)
cMoneyStringBuffer.(cMoneyStringBuffer.length() - 1,
cMoneyStringBuffer.length());
cMoneyStringBuffer.append(fractionPart);
result = cMoneyStringBuffer.toString();
return result;
}
private String addUnitsToChineseMoneyString(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);
cMoneyStringBuffer.(cMoneyStringBuffer.length() - 1, JIAO);
cMoneyStringBuffer.(cMoneyStringBuffer.length(), FEN);
if (cMoneyStringBuffer.indexOf(“零角零分”) != -1)// 没有零头,加整
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零角零分”),
cMoneyStringBuffer.length(), “整”);
else if (cMoneyStringBuffer.indexOf(“零分”) != -1)// 没有零分,加整
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(“零分”),
cMoneyStringBuffer.length(), “整”);
else {
if (cMoneyStringBuffer.indexOf(“零角”) != -1)
cMoneyStringBuffer.(cMoneyStringBuffer.indexOf(“零角”),
cMoneyStringBuffer.indexOf(“零角”) + 2);
// tmpBuffer.append(“整”);
}
result = cMoneyStringBuffer.toString();
return result;
}
private void checkPrecision(String moneyStr) {//5336.53663 10-5-1
int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1;
if (fractionDigits >2)
throw new RuntimeException(“金额” + moneyStr + “的小数位多于两位。”); // 精度不能比分低
}
public static void main(String[] args) {
System.out.println(getInstance().format(new Double(8951.11)));
}
}
[java面试编程题]
2.java编程习题 篇二
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.
3.Java编程语言程序的认识误区 篇三
软件的生命性
软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构,反复强调都不过分。
一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。
目前,很多人对软件的思想焦点还是落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。
正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如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和设计模式一样,不是一种新的理论,而是实战经验的总结,它将前人使用面向模型设计的方法经验提炼出来,供后来者学习,以便迅速找到驾驭我们软件项目的根本之道。
4.java编程思想读书笔记 篇四
万物皆对象,抽取待求解问题的任何概念化构件,将其表示为程序中的对象
程序是对象的集合,他们通过发送消息来告知彼此所要做的
每个对象都有自己的由其他对象所构成的存储,创建包含所有对象的包的方式来创建新类型的对象
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
1。java还有个“缺省”的访问权限,如果你没用public、protected、private的话,那就是指它了。通常把它称为package访问权限。因为同属这个package的类可以访问这个package中其它类的“缺省”权限的成员,但是出了这个package,它们就都是private的了。
2。多态性,处理类系的时候,通常你不用把它当作某个具体的类型,只要把它当作基类对象就可以了,即把泛型的基类当作派生类来用。非oop的编译器的做法是前绑定,即编译器会产生那个名字的函数调用,而连接器负责将这个调用解析成须执行的代码的绝对地址。oop的编译器用了后绑定,即当你向某个对象送了一个消息后,不到运行时,系统不能确定到底调用哪段代码。java用存储在对象中的信息来计算方法的地址,因此每个对象的运行都会不同。后绑定是java的缺省行为,c++中必须用virtual声明。
3。abstract关键词声明类为抽象类,编译器会阻止任何人创建abstract类的对象,而只是把其派生类的对象上传给它。abstract也可以声明方法,表示这个类所派生的所有类都有这个方法,但是它的实现不在这里。abstract方法只能存在于abstract类中。
4。interface关键词是对abstract类的概念的深化,它不允许你实现任何方法,只作为接口使用.可以继承多个接口,java中无类多重继承。
5。c++支持的变量有自动、静态、寄存器和堆,java只支持堆变量,每次创建对象的时候都要用new来动态分配堆内存。
6。容器和迭代器:容器:c++标准模板类库stl = java标准类库的容器类,迭代器:将基于不同数据结构的容器抽象为一个简单线性序列的类。
7。java是单根继承体系,object作为最终基类使所有对象都具有某些基本操作。单根继承和系统通过reference操控对象,使垃圾回收器可以释放堆内存。
8。java容器只持有object对象,单根继承使它能持有任何对象上传只要把对象的reference直接放入即可,取对象时,必须知道它原有的类型,从容器中取出对象的reference然后强制转换为原因类型(下传:由基类到其派生类)。
9。参数化类型:能够根据需要由编译器自动指派类型的类,c++的模板template即参数化类型。java暂不支持
10。异常是一种能从错误发生的地方被抛出的对象,并被能解决这类问题的异常处理程序所捕获,异常肯定能得到处理,并且能够从错误状态下恢复。java的异常处理是从底层开始的,而且还不能不用,否则就不能编译通过。
11。java语音内置了多线程支持,线程被表示为对象,java还有一定的资源锁定功能,可以通过synchronized关键字锁定对象内存。
12。持久性:java可以通过对象的序列化或java数据对象来实现把对象从磁盘中存储和提取。
13。传统w/s:浏览器上送web服务器的数据由web服务器上的通用网关接口程序CGI处理,常用语言perl、python、C++等。
14。客户端编程:插件:可以为浏览器添加新的功能,甚至创造新的客户端编程语言。脚本语言:把客户端的源代码直接嵌入到html页面中,html页面显示的时候自动激活插件解释这些程序。常用脚本语言javascript、vbscript、tcl/tk等。java:可以通过applet和java web start进行客户端编,applet是一个只能运行在web浏览器里的小程序,applet是被编译过的代码,作为web页面的一部分自动下载,在被激活的时候开始运行。java web start分发在web浏览器外运行的独立程序。Activex操作上不受限制。
5.哪家有java游戏编程视频教程 篇五
/video
哪家有java游戏编程视频教程
想学习Java的人在刚开始都要问哪家有Java游戏编程视频教程?,视频主要讲什么?它的实用性、性能和向后兼容性都彰显其价值所在。随着互联网的发展,Java作为最主流的语言,学习的人会越来越多。
是什么让Java在20年之后依然能够成功呢?
准确测量程序设计语言的受欢迎程度是很困难的,但众多调研统计中的一个普遍接受的指标是 TIOBE指数。它能够通过各种搜索引擎以及谷歌博客、维基百科甚至YouTube进行语言跟踪。(在写这篇文章的时候,我学到了一些新东西,那就是,TIOBE其实是“The Importance Of Being Ernest”的缩写,它是奥斯卡·王尔德的一部剧作,虽然我不清楚这跟程序设计语言有什么关系)。
回顾过去,Java一直是数一数二的。Java已经占据了曾经C语言所拥有的
千锋教育-中国IT职业教育领先品牌
千锋教育Java视频教程
/video
地位,而C语言在Java开始流行之前一直是最受关注的语言。(事情变化多快啊!早在1986年Lisp语言还是排名第二的语言而Ada排名第三)。TIOBE指数也刚刚宣布2015年是Java语言年,而十年之前,Java就已然获此殊荣。
作为普及率的另外一个体现,世界上已有九百万的Java开发者。那为什么Java能够持续的受到欢迎呢? 我认为还是有一些原因的,这里我们列举四条:
1、实用性
James Gosling将Java描述为“蓝领”的程序设计语言。它能使开发者花最小的代价完成工作,同时还能使得开发者在一段时间之后,还能继续完成别人的(甚至自己的)代码并且明白其中的意思。当然,你也可以编写可读性差的代码,就像你在其他语言中能做的一样,但是使用良好的编码风格能够让它比其他许多语言都有更好的可读性。
2.向下兼容
Sun公司在确保一个版本的Java代码能够正常地在新的版本运行上做出了很多努力。虽然事情并不总是这样(如JavaSE1.4中的断言和JavaSE5中的枚举)并且有时不向下兼容的做法能够获得更好的实现(如:泛型),但向下兼容
千锋教育-中国IT职业教育领先品牌
千锋教育Java视频教程
/video
对开发者来说依然是一个引人注目的特性。没有比为了能在新版本的平台上运行代码而修改旧版本中的正常代码更糟糕的事情了。这简直是浪费时间。
3.可扩展性/性能/可靠性
在超过20年和每年数以千计的开发者的推动和发展,Java已经成为了一个坚实的平台,可以赶上甚至超过本地代码的水准(多亏了JVM使用了动态而非静态代码解析的一些优化)。当谈及可扩展性,看看使用Java语言的一些大型企业:Twitter(抛弃了JVM的Ruby-on-Rails,因为它不再能够扩展),Spotify,Facebook,Scalesforce,eBay,当然还有Oracle。Hadoop,Cassandra和Spark,大数据工程的基础框架,无不使用Java或者Scala并且在JVM虚拟机上运行的。如果你想要良好的拓展性和性能,Java和JVM是最好的选择。
4.保鲜度
对我来说这是最重要的一条。查看TIOBE统计图能够发现,2014年10月份开始,Java的受欢迎程度有了显著的提升,这刚好是在JDK8发行之后。JDK8对Java开发者来说有了显著的变化,它引入了Lambda表达式和Stream API。突然间Java开发者能够在不用学习一整套新语言(如Scala)的情况下以一个更加有效的方式进行开发。这些特点也使它有可能更简单地利用多核/多处理器的机器,而不必写很多复杂的和潜在的容易出错的多线程代码。随着Jigsaw工程在为JDK 9的发布而启动,我们会看到模块化使大企业应用程序更容易建立、部署和维护。同时在JDK10中,对于发展新的语言特性的计划已经在进行中了,比如值的类型等等。
千锋教育-中国IT职业教育领先品牌
千锋教育Java视频教程
/video
我相信Java能够在接下来继续保持领先地位。
千锋教育现为回馈广大学子,特请一线名师打造Java顶级课程免费赠送给广大学子Java游戏编程视频教程。http:///video/?,点击进入该网站即可免费领取。如有任何问题,还可加千锋教育官方qq群421475630。欢迎咨询千锋!
6.java编程习题 篇六
[ 来源:Java | 作者:Java | 时间:2007-7-20 | 去论坛]
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间 的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程我想就是指按照这种思想来编程吧!实际上,在日常工作中,你已经按 照接口编程了,只不过如果你没有这方面的意识,那么你只是在被动的实现这一思想;表现在频繁的抱怨别人改的代码影响了你(接口没有设计到),表现在某个模 块的改动引起其他模块的大规模调整(模块接口没有很好的设计)等等。
Booch先生那天谈到Interaction Designer,它就是指做这类设计的人,只不过层次更高一些。我想目前我们的软件设计队伍中,这类人是最缺乏的人才之一。非接口编程?是不是就是面向过程的编程思想?
1.关于接口的理解。
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。
2.设计接口的另一个不可忽视的因素是接口所处的环境(context,environment),系统论的观点:环境是系统要素所处的空间与外部影响 因素的总和。任何接口都是在一定的环境中产生的。因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。
3.按照组件的开发模型(3C),它们三者相辅相成,各司一面,浑然一体,缺一不可。
面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法
面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现
接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题
我认为:UML里面所说的interface是协议的另一种说法。并不是指com的interface,CORBA的interface,Java的interface,Delphi的interface,人机界面的interface或NIC的interface。
在具体实现中,是可以把UML的interface实现为语言的interface,分布式对象环境的interface或其它什么 interface,但就理解UML的interface而言,指的是系统每部分的实现和实现之间,通过interface所确定的协议来共同工作。
所以我认为,面向interface编程,原意是指面向抽象协议编程,实现者在实现时要严格按协议来办。也就是Bill Joy同志说的,一边翻 rfc,一边写代码的意思。面向对象编程是指面向抽象和具象。抽象和具象是矛盾的统一体,不可能只有抽象没有具象。一般懂得抽象的人都明白这个道理。但 有的人只知具象却不知抽象为何物。
所以只有interface没有实现,或只有实现而没有interface者是没有用的,反OO的。
所以还是老老实实面向对象编程,面向协议编程,或者什么都不面向,老老实实编程。
7.Java可视化编程技巧探究 篇七
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.
8.java编程习题 篇八
关键词:计算机;软件开发;JAVA编程;语言分析
【中图分类号】TP312.2
引言
随着计算机科学技术的提升和国家经济的飞速发展,互联网技术也在不断更新和完善。JAVA编程语言作为计算机软件开发中最基拙的语言,得到了软件开发人员的广泛应用。基于JAVA编程语言的计算机软件开发能够保证软件完成后的安全性与可靠性,而且编程过程较为简便、可操作性强,能够满足各大平台的使用需求。早期JAVA编程语言主要是以一种嵌入式的方式构成计算机软件的组件,逐步过渡到以移置性的方式置入软件中。随着互联网技术的迅猛发展,JAVA编程语言也逐步成为计算机软件编程的主流语言。
一、JAVA编程语言的含义
随着计算机信息技术的发展,计算机软件编程语言如雨后春笋般冒出,推动了计算机编程语言的多元化发展,但是就大部分编程语言的使用情况来看往往不尽如人意,主要体现在编程语言繁琐、复杂,而且缺乏良好的可操作性,不能满足多平台的综合应用。JAVA编程语言相对而言更为简单明了、在进行软件开发的过程中操作极为简便,同时也能够满足多操作平台的使用需求,也能够在网络运行的状态下进行软件程序的编制。
二、JAVA编程语言的基本特征
(一)、面向对象
计算机软件编程技术的不断发展与更新,使其应用范围更加广泛,应广大用户的使用需要,一个全新的编程思维理念快速产生,面向对象的使用,对于整个计算机软件编程技术来说有很大的促进作用,面向对象方法使计算机软件编程技术可以更好的对客观元素进行基本的分類工作,通过成员变量及参数的封装方式等方法来进行元素基本特性的及时,JAVA 语言可以充分利用面向对象方法的优点,使每个计算机应用软件的特点都达到用户的使用要求。
(二)、平台独立
这个特征主要是针对JAVA虚拟机,首先是编译为中间码后再装载与校验,被解释之后就转变为机器码被执行,就是这种特征就让JAVA可以避免特殊平台环境要求,在编写只要系统可以支持JAVA虚拟机,也就能够运行JAVA程序。以 JAVA7.0为例,通过升级类加载class loader架构的应用和Better type inference这一卓越的类型推断的应用,JAVA7.0 在提升系统独立性的同时也促进了自身运行速度的有效提升。
(三)、可移植性
JAVA 编程语言的可移植性能比较好,能够在 Web站点上灵活地下载应用程序并使用。用户能在 Web 网页上下载需要的程序,包括图像、图像和 HTML 等,网络浏览器就会在 Web 网页上组织这些片段,方便用户查看。Java 编程用户能够确保 Web 运行的程序运行在任何计算机上。还有,JAVA编程语言对基本的数据类型长度进行了严格的规定。相对于其他的编程语言来说JAVA编程语言能够更加方便计算机用户使用网络资源,包括各种图片、视颂资料等,这个特点对于计算机的远程资料传输有很大的帮助,这就是JAVA编程语言的可移植性。
(四)、安全可靠性
运用JAVA编程语言,可以实现加密技术,JAVA软件以秘钥技术为基础实现了一些确认技术。JAVA程序显示器也可以根据不同情况产生不同的改变,当JAVA显示器产生改变时,可以尽快切断对外界数据的访问,进而更有效地防止了数据的丢失和破坏,提高了数据的安全性,避免数据被病毒侵蚀而造成不可挽回的损失。因此,计算机软件开发中的JAVA编程语言更加安全可靠。
三、基于计算机软件开发的JAVA编程语言分析
JAVA编程语言因为其独有的优越性因此被许多平台的软件开发者所青睐。同样JAVA编程语言在计算机软件开发中也有重要作用。以下从几个方面出发,对基于计算机软件开发的 JAVA编程语言进行分析。
(一)、JAVA Database Connectivity技术
JAVA Database Connectivity (JDBC)是一种数据库的连接技术,在计算机软件的设计活动中主要用于对数据库的规范,能够在不同的数据库之间建立信息交互的通道,保证数据库的数据输出保持一定的程序接口,也就是实现了数据库的统一访问和统一管理。在具体的计算机软件设计活动中设计人员经常使用这一技术对软件内部不同的数据库进行规范,能够极大的提升数据库的运行速度和质量。同时JAVA Database Connectivity还为PC软件的开发提供数据库查询和数据库更新的功能。这些功能的存在改变了计算机软件设计的数据库管理形式,极大的提升了计算机软件设计的质量和效率。
(二)、JAVA Annotation技术
这种技术属于一种特殊元数据语法;JAVA Annotation技术能够被添加进 JAVA代码之中。而且其中的参数与变量均能够被有效标注,说明这种标签注解能够被反射的。在计算机软件开发中应用JAVA Annotation技术能够合理连接JAVA编程语言中相关的变量、属性以及参数,同时还能够确保连接机制具备有效整合方式。并且应用JAVA Annotation技术技术还能够给开发人员提供不属于程序的数据。比如开发计算机软件者在编写代码过程中,经过编译器就能够阐明一些特殊的禁止情况,还能够有效分析错误数据。JAVA Annotation技术中的Java Beans属于一项重要技术,这种技术具备开发平台外的特征,并且属于独立的,所以在开发计算机软件过程中,就能够有效提升安全性与一致性,所以在开发计算机软件过程中应用比较广泛。它具有独立于开发平台之外的特性。
(三)、Remote Method Invocation技术
该技术所用程序可分布式就可以得到实现,另外一个方面,经过调用JAVA编程语言中对象和类,并且运行客户机和服务器间的程序,将这种技术应用到程序开发中,可以有效整合资源信息,并且可以分布式运用调试不同的小程序,促使程序的完整性和安全性得到保证。
四、JAVA语言未来前景
因为JAVA语言具有诸多优点,故其具有美好的应用前景,其未来发展定会和互联网需求相互绑定。JAVA语言应用前景包括以下几方面内容:面向对象(全部) 应用的开发;在软件工程中用于开发实现、系统设计、需求分析及维护;中型及小型多媒体系统的设计过程和实现;用于消息传输系统的实现;在分布计算交易的管理应用,Internet系统管理功能模块设计过程,主要包含 Web 页面动态设计、网站信息管理及交互操作等内容的设计;WEB服务器后端和各种数据可连接管理器;Internet系统管理功能模块设计、Internet上基于WEB及JAVA的应用开发。数据库、用户及网络的安全扫描等诸多系统;应用及网络管理系统;其他应用类型程序设计之中。
结束语
随着计算机技术的不断发展和计算机软件开发水平的不断提高,JAVA编程语言在计算机软件开发中的应用范围也越来越廣,计算机应用软件的不断更新给计算机语言带来了极大的挑战,JAVA 语言下计算机软件编程既可以顺应计算机应用软件的编写需求,同时可以完善计算机软件的编写与开发过程,提高技术人员的工作效率与工作质量,给我国的计算机应用软件的开发与发展提供了一个很好的发展平台。相关的研究开发人员需要通过努力,促使JAVA语言将更多的功能支持给提供出来,深入的分析编程技术,对其不断的完善,以便跟上时代发展的脚步,满足人们日益多样化的需求。
参考文献
[1] 程蓉蓉. 基于计算机软件开发的JAVA编程语言分析[J]. 宿州教育学院学报,2015,01:55-56+58.
[2] 孙鹏. 基于计算机软件开发的JAVA编程语言分析[J]. 电子制作,2015,10:94.
[3] 赵相宇. 以计算机软件开发为基础探讨JAVA编程语言[J]. 通讯世界,2015,14:221.
[4] 刘芳. 计算机软件开发中JAVA编程语言的应用价值[J]. 电子技术与软件工程,2015,13:253.
【java编程习题】推荐阅读:
java基础编程题及答案11-07
java复习题集及答案10-16
游戏编程常用07-04
scratch编程教材06-21
编程大赛策划方案09-18
CNC编程简历范文08-18
数控车床编程培训09-24
MFC编程学习心得10-15
数控编程毕业设计11-11
计算机编程语言08-06