仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 927|回复: 13
打印 上一主题 下一主题

[学习教程] JAVA网页设计JDK5.0的11个次要新特性

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点1泛型(Generic)

  1.1申明
  加强了java的范例平安,能够在编译时代对容器内的对象举行范例反省,在运转期不用举行范例的转换。而在j2se5之前必需在运转期静态举行容器内对象的反省及转换
  削减含混的容器,能够界说甚么范例的数据放进容器
ArrayList<Integer>listOfIntegers;//<TYPE_NAME>isnewtothesyntax
IntegerintegerObject;
listOfIntegers=newArrayList<Integer>();//<TYPE_NAME>isnewtothesyntax
listOfIntegers.add(newInteger(10));//只能是Integer范例
integerObject=listOfIntegers.get(0);//掏出对象不必要转换
  1.2用法
  声明及实例化泛型类:
HashMap<String,Float>hm=newHashMap<String,Float>();
file://不克不及利用原始范例
GenList<int>nList=newGenList<int>();file://编译毛病
  J2SE5.0今朝不撑持原始范例作为范例参数(typeparameter)
  界说泛型接口:
publicinterfaceGenInterface<T>{

voidfunc(Tt);
}
  界说泛型类:
publicclassArrayList<ItemType>{...}

publicclassGenMap<T,V>{...}
  例1:
publicclassMyList<Element>extendsLinkedList<Element>

{
publicvoidswap(inti,intj)
{
Elementtemp=this.get(i);
this.set(i,this.get(j));
this.set(j,temp);
}

publicstaticvoidmain(String[]args)
{
MyList<String>list=newMyList<String>();
list.add("hi");
list.add("andy");
System.out.println(list.get(0)+""+list.get(1));
list.swap(0,1);
System.out.println(list.get(0)+""+list.get(1));
}
}
  例2:
publicclassGenList<T>{

privateT[]elements;
privateintsize=0;
privateintlength=0;

publicGenList(intsize){
elements=(T[])newObject[size];
this.size=size;
}

publicTget(inti){
if(i<length){
returnelements;
}
returnnull;
}

publicvoidadd(Te){
if(length<size-1)
elements[length++]=e;
}
}
  泛型办法:
publicclassTestGenerics{

public<T>StringgetString(Tobj){file://完成了一个泛型办法
returnobj.toString();
}

publicstaticvoidmain(String[]args){
TestGenericst=newTestGenerics();
Strings="Hello";
Integeri=100;
System.out.println(t.getString(s));
System.out.println(t.getString(i));
}
}
  1.3受限泛型
  受限泛型是指范例参数的取值局限是遭到限定的.extends关头字不单单能够用来声明类的承继干系,也能够用来声明范例参数(typeparameter)的受限干系.比方,我们只必要一个寄存数字的列表,包含整数(Long,Integer,Short),实数(Double,Float),不克不及用来寄存其他范例,比方字符串(String),也就是说,要把范例参数T的取值泛型限定在Number极为子类中.在这类情形下,我们就能够利用extends关头字把范例参数(typeparameter)限定为数字
  示例
publicclassLimited<TextendsNumber>{

publicstaticvoidmain(String[]args){
Limited<Integer>number;file://准确
Limited<String>str;file://编译毛病
}
}
  1.4泛型与非常
  范例参数在catch块中不同意呈现,可是能用在办法的throws以后。例:
importjava.io.*;

interfaceExecutor<EextendsException>{
voidexecute()throwsE;
}

publicclassGenericExceptionTest{
publicstaticvoidmain(Stringargs[]){
try{
Executor<IOException>e=newExecutor<IOException>(){
publicvoidexecute()throwsIOException{
//codeherethatmaythrowan
//IOExceptionorasubtypeof
//IOException
}
};
e.execute();
}catch(IOExceptionioe){
System.out.println("IOException:"+ioe);
ioe.printStackTrace();
}
}
}
  1.5泛型的通配符"?"
  "?"能够用来取代任何范例,比方利用通配符来完成print办法。
publicstaticvoidprint(GenList<?>list){})


  1.6泛型的一些范围型
  不克不及实例化泛型
Tt=newT();file://error


  不克不及实例化泛型范例的数组
T[]ts=newT[10];file://编译毛病


  不克不及实例化泛型参数数
Pair<String>[]table=newPair<String>(10);//ERROR


  类的静态变量不克不及声明为范例参数范例
publicclassGenClass<T>{

privatestaticTt;file://编译毛病
}
  泛型类不克不及承继自Throwable和其子类
publicGenExpection<T>extendsException{}file://编译毛病


  不克不及用于基本范例int等
Pair<double>file://error

Pair<Double>file://right
2加强轮回(EnhancedforLoop)

  旧的轮回
LinkedListlist=newLinkedList();

list.add("Hi");
list.add("everyone!");
list.add("Was");
list.add("the");
list.add("pizza");
list.add("good?");
for(inti=0;i<list.size();i++)
System.out.println((String)list.get(i));
file://大概用以下轮回
file://for(Iteratoriter=list.iterator();iter.hasNext();){
file://IntegerstringObject=(String)iter.next();
//...morestatementstousestringObject...
file://}
  新的轮回
LinkedList<String>list=newLinkedList<String>();

list.add("Hi");
list.add("everyone!");
list.add("Was");
list.add("the");
list.add("pizza");
list.add("good?");
for(Strings:list)
System.out.println(s);
  很明晰、便利,一看便知其用法
3可变参数(VariableArguments)

  完成了更天真的办法参数传进体例,System.out.printf是个很好的例子
  用法:voidtest(Object…args)
  一个很简单了解的例子
publicstaticintadd(int...args){

inttotal=0;
for(inti=0;i<args.length;i++)
total+=args;
returntotal;
}
publicstaticvoidmain(String[]args){
inta;
a=Varargs.add(1,2,3,4,5,6,7,8,9,10);
System.out.println(a);
}
4主动完成装箱息争箱操纵(Boxing/UnboxingConversions)

  申明:完成了基础范例与外覆类之间的隐式转换。基础范例至外覆类的转换称为装箱,外覆类至基础范例的转换为解箱。这些类包含
PrimitiveTypeReferenceType
booleanBoolean
byteByte
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble
  比方,旧的完成体例
IntegerintObject;

intintPrimitive;
ArrayListarrayList=newArrayList();
intPrimitive=11;
intObject=newInteger(intPrimitive);
arrayList.put(intObject);//不克不及放进int范例,只能使Integer
  新的完成体例
intintPrimitive;

ArrayListarrayList=newArrayList();
intPrimitive=11;
file://在这里intPrimitive被主动的转换为Integer范例
arrayList.put(intPrimitive);
5静态导进(StaticImports)

  很复杂的工具,看一个例子:
  没有静态导进
Math.sqrt(Math.pow(x,2)+Math.pow(y,2));


  有了静态导进
importstaticjava.lang.Math.*;

sqrt(pow(x,2)+pow(y,2));
  个中importstaticjava.lang.Math.*;就是静态导进的语法,它的意义是导进Math类中的一切static办法和属性。如许我们在利用这些办法和属性时就不用写类名。
  必要注重的是默许包没法用静态导进,别的假如导进的类中有反复的办法和属性则必要写出类名,不然编译时没法经由过程。
6列举类(EnumerationClasses)

  用法:publicenumName{types,….}
  复杂的例子:
publicenumColors{Red,Yellow,Blue,Orange,Green,Purple,Brown,Black}

publicstaticvoidmain(String[]args){
ColorsmyColor=Colors.Red;
System.out.println(myColor);
}
  又一个复杂例子:
importjava.util.*;

enumOperatingSystems{windows,unix,linux,macintosh}
publicclassEnumExample1{
publicstaticvoidmain(Stringargs[]){
OperatingSystemsos;
os=OperatingSystems.windows;
switch(os){
casewindows:
System.out.println(“YouchoseWindows!”);
break;
caseunix:
System.out.println(“YouchoseUnix!”);
break;
caselinux:
System.out.println(“YouchoseLinux!”);
break;
casemacintosh:
System.out.println(“YouchoseMacintosh!”);
break;
default:
System.out.println(“Idon’tknowyourOS.”);
break;
}
}
}
  应运enum简写的例子:
importjava.util.*;

publicclassEnumTest
{
publicstaticvoidmain(String[]args)
{
Scannerin=newScanner(System.in);
System.out.print("Enterasize:(SMALL,MEDIUM,LARGE,EXTRA_LARGE)");
Stringinput=in.next().toUpperCase();
Sizesize=Enum.valueOf(Size.class,input);
System.out.println("size="+size);
System.out.println("abbreviation="+size.getAbbreviation());
if(size==Size.EXTRA_LARGE)
System.out.println("Goodjob--youpaidattentiontothe_.");
}
}

enumSize
{
SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");

privateSize(Stringabbreviation){this.abbreviation=abbreviation;}
publicStringgetAbbreviation(){returnabbreviation;}
privateStringabbreviation;
}
  enum类中具有办法的一个例子:
enumProgramFlags{

showErrors(0x01),
includeFileOutput(0x02),
useAlternateProcessor(0x04);
privateintbit;
ProgramFlags(intbitNumber){
bit=bitNumber;
}
publicintgetBitNumber(){
return(bit);
}
}
publicclassEnumBitmapExample{
publicstaticvoidmain(Stringargs[]){
ProgramFlagsflag=ProgramFlags.showErrors;
System.out.println(“Flagselectedis:“+
flag.ordinal()+
“whichis“+
flag.name());
}
}
7元数据(Metadata)

  请参考
  http://www-900.ibm.com/developerWorks/cn/java/j-annotate1/
  http://www-900.ibm.com/developerworks/cn/java/j-annotate2.shtml
8BuildingStrings(StringBuilder类)

   在JDK5.0中引进了StringBuilder类,该类的办法不是同步(synchronized)的,这使得它比StringBuffer加倍轻量级和无效。
9把持台输出(ConsoleInput)

  在JDK5.0之前我们只能经由过程JOptionPane.showInputDialog举行输出,但在5.0中我们能够经由过程类Scanner在把持台举行输出操纵
  比方在1.4中的输出
Stringinput=JOptionPane.showInputDialog(prompt);

intn=Integer.parseInt(input);
doublex=Double.parseDouble(input);
s=input;
  在5.0中我们能够
Scannerin=newScanner(System.in);

System.out.print(prompt);
intn=in.nextInt();
doublex=in.nextDouble();
Strings=in.nextLine();
10CovariantReturnTypes(不知道怎样翻译,也许是改动前往范例)

  JDK5之前我们掩盖一个办法时我们没法改动被办法的前往范例,但在JDK5中我们能够改动它
  比方1.4中我们只能
publicObjectclone(){...}

...
Employeecloned=(Employee)e.clone();
  可是在5.0中我们能够改动前往范例为Employee
publicEmployeeclone(){...}

...
Employeecloned=e.clone();
11格局化I/O(FormattedI/O)

  增添了相似C的格局化输出输入,复杂的例子:
publicclassTestFormat{

publicstaticvoidmain(String[]args){
inta=150000,b=10;
floatc=5.0101f,d=3.14f;
System.out.printf("%4d%4d%n",a,b);
System.out.printf("%x%x%n",a,b);
System.out.printf("%3.2f%1.1f%n",c,d);
System.out.printf("%1.3e%1.3e%n",c,d*100);
}
}
  输入了局为:
15000010
249f0a
5.013.1
5.010e+003.140e+02
  上面是一些格局化参数申明(摘自CoreJava2VolumeI-Fundamentals,SeventhEdition)


Table3-5.Conversionsforprintf

ConversionCharacter

Type

Example

d

Decimalinteger

159

x

Hexadecimalinteger

9f

o

Octalinteger

237

f

Fixed-pointfloating-point

15.9

e

Exponentialfloating-point

1.59E+01

g

Generalfloating-point(theshorterofeandf)


a

Hexadecimalfloatingpoint

0x1.fccdp3

s

String

Hello

c

Character

H

b

Boolean

TRUE

h

Hashcode

42628b2

tx

Dateandtime

SeeTable3-7

%

Thepercentsymbol

%

n

Theplatform-dependentlineseparator



Table3-7.DateandTimeConversionCharacters

ConversionCharacter

Type

Example

C

Completedateandtime

MonFeb0918:05:19PST2004

F

ISO8601date

2004-02-09

D

U.S.formatteddate(month/day/year)

02/09/2004

T

24-hourtime

18:05:19

r

12-hourtime

06:05:19pm

R

24-hourtime,noseconds

18:05

Y

Four-digityear(withleadingzeroes)

2004

y

Lasttwodigitsoftheyear(withleadingzeroes)

04

C

Firsttwodigitsoftheyear(withleadingzeroes)

20

B

Fullmonthname

February

borh

Abbreviatedmonthname

Feb

m

Two-digitmonth(withleadingzeroes)

02

d

Two-digitday(withleadingzeroes)

09

e

Two-digitday(withoutleadingzeroes)

9

A

Fullweekdayname

Monday

a

Abbreviatedweekdayname

Mon

j

Three-digitdayofyear(withleadingzeroes),between001and366

069

H

Two-digithour(withleadingzeroes),between00and23

18

k

Two-digithour(withoutleadingzeroes),between0and23

18

I

Two-digithour(withleadingzeroes),between01and12

06

l

Two-digithour(withoutleadingzeroes),between1and12

6

M

Two-digitminutes(withleadingzeroes)

05

S

Two-digitseconds(withleadingzeroes)

19

L

Three-digitmilliseconds(withleadingzeroes)

047

N

Nine-digitnanoseconds(withleadingzeroes)

047000000

P

Uppercasemorningorafternoonmarker

PM

p

Lowercasemorningorafternoonmarker

pm

z

RFC822numericoffsetfromGMT

-0800

Z

Timezone

PST

s

Secondssince1970-01-0100:00:00GMT

1078884319

E

Millisecondssince1970-01-0100:00:00GMT

1078884319047


Table3-6.Flagsforprintf

Flag

Purpose

Example

+

Printssignforpositiveandnegativenumbers

+3333.33

space

Addsaspacebeforepositivenumbers

|3333.33|

0

Addsleadingzeroes

003333.33

-

Left-justifiesfield

|3333.33|

(

Enclosesnegativenumberinparentheses

(3333.33)

,

Addsgroupseparators

3,333.33

#(forfformat)

Alwaysincludesadecimalpoint

3,333.

#(forxoroformat)

Adds0xor0prefix

0xcafe

^

Convertstouppercase

0XCAFE

$

Specifiestheindexoftheargumenttobeformatted;forexample,%1$d%1$xprintsthefirstargumentindecimalandhexadecimal

1599F

<

Formatsthesamevalueasthepreviousspecification;forexample,%d%<xprintsthesamenumberindecimalandhexadecimal



  这里是一些复杂的先容,更具体的申明请参考:
  CoreJava2VolumeI-Fundamentals,SeventhEdition
  CoreJava2VolumeII-AdvancedFeatures,SeventhEdition
  内里都有一些很出色的形貌,中文称号就是《Java中心手艺》。只要第七版才有J2SE5.0的先容,可是第七版仿佛还没有中文版。本文还参考了ProfessionalJavaJDK-5thEdition.

其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
老尸 该用户已被删除
沙发
发表于 2015-1-20 17:33:41 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
柔情似水 该用户已被删除
板凳
发表于 2015-1-24 11:29:27 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
兰色精灵 该用户已被删除
地板
发表于 2015-1-24 15:07:21 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
分手快乐 该用户已被删除
5#
发表于 2015-1-25 22:16:08 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-4 06:07:23 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
再见西城 该用户已被删除
7#
发表于 2015-2-6 14:21:55 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
只想知道 该用户已被删除
8#
发表于 2015-2-10 17:18:41 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
莫相离 该用户已被删除
9#
发表于 2015-2-11 14:10:29 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
简单生活 该用户已被删除
10#
发表于 2015-2-13 00:59:12 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
山那边是海 该用户已被删除
11#
发表于 2015-2-18 12:05:19 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
第二个灵魂 该用户已被删除
12#
发表于 2015-3-6 05:50:22 | 只看该作者
是一种为 Internet发展的计算机语言
透明 该用户已被删除
13#
发表于 2015-3-11 02:31:12 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
14#
发表于 2015-3-12 08:31:07 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 07:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表