首页编程java编程java 集合长度减一是什么 请问在java中如何表示集合

java 集合长度减一是什么 请问在java中如何表示集合

编程之家2023-10-1398次浏览

很多朋友对于java 集合长度减一是什么和请问在java中如何表示集合不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

java 集合长度减一是什么 请问在java中如何表示集合

java经典面试题

(4)以下代码中的两个sizeof用法有问题吗?

[C易] void UpperCase( char str[])//将 str中的小写字母转换成大写字母{ for( size_t i=0; i<sizeof(str)/sizeof(str[0]);++i) if('a'<=str[i]&& str[i]<='z') str[i]-=('a'-'A');} char str[]="aBcDe"; cout<<"str字符长度为:"<< sizeof(str)/sizeof(str[0])<< endl; UpperCase( str); cout<< str<< endl;答案:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0',函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

(5)一个32位的机器,该机器的指针是多少位答案:

java 集合长度减一是什么 请问在java中如何表示集合

指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。

6。main(){ int a[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d,%d",*(a+1),*(ptr-1));}答案:2。5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int*ptr=(int*)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为 int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

7。请问以下代码有什么问题: int main(){ char a; char*str=&a; strcpy(str,"hello"); printf(str); return 0;}答案:没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

java 集合长度减一是什么 请问在java中如何表示集合

8。char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s);有什么错?答案:"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

9。写一个“标准”宏,这个宏输入两个参数并返回较小的一个。答案:.#define Min(X, Y)((X)>(Y)?(Y):(X))//结尾没有‘;’

10。嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。答案:while(1){}或者for(;;)

11。关键字static的作用是什么?答案:定义静态变量

12。关键字const有什么含意?答案:表示常量不可以修改的变量。

13。关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。

14。int(*s[10])(int)表示的是什么啊?答案:int(*s[10])(int)函数指针数组,每个指针指向一个int func(int param)的函数。

15。有以下表达式: int a=248; b=4;int const c=21;const int*d=&a; int*const e=&b;int const*f const=&a;请问下列表达式哪些会被编译器禁止?为什么?答案:*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;*c这是个什么东东,禁止*d说了是const,禁止 e=&a说了是const禁止 const*f const=&a;禁止

16交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;答案:有两种解法,一种用算术算法,一种用^(异或) a= a+ b; b= a- b; a= a- b; or a= a^b;//只能对int,char.. b= a^b; a= a^b; or a ^= b ^= a;

17.c和c++中的struct有什么不同?答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private

18.#include<stdio.h>#include<stdlib.h> void getmemory(char*p){ p=(char*) malloc(100); strcpy(p,"hello world");} int main(){ char*str=NULL; getmemory(str); printf("%s/n",str); free(str); return 0;}答案:程序崩溃,getmemory中的malloc不能返回动态内存, free()对str操作很危险

19.char szstr[10]; strcpy(szstr,"0123456789");产生什么结果?为什么?答案:长度不一样,会造成非法的OS

20.列举几种进程的同步机制,并比较其优缺点。答案:原子操作信号量机制自旋锁管程,会合,分布式系统

21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础

22.进程死锁的原因答案:资源竞争及进程推进顺序非法

23.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路

24.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁

25.操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈

26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个

27.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0;是接口,子类必须要实现

28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变

29.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?答案:应用层表示层会话层运输层网络层物理链路层物理层 tcp/udp属于运输层 TCP服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP不同, UDP并不提供对 IP协议的可靠机制、流控制以及错误恢复功能等。由于 UDP比较简单, UDP头包含很少的字节,比 TCP负载消耗少。 tcp:提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好 udp:不提供稳定的服务,包头小,开销小

30:(void*)ptr和(*(void**))ptr的结果是否相同?其中ptr为同一个指针答案:.(void*)ptr和(*(void**))ptr值是相同的

31:int main(){ int x=3; printf("%d",x); return 1;}问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息

32,要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000= 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?答案:*((void(*)())0x100000)();首先要将0x100000强制转换成函数指针,即:(void(*)())0x100000然后再调用它:*((void(*)())0x100000)();用typedef可以看得更直观些: typedef void(*)() voidFuncPtr;*((voidFuncPtr)0x100000)();

33,已知一个数组table,用一个宏定义,求出数据的元素个数答案:#define NTBL#define NTBL(sizeof(table)/sizeof(table[0]))

34。线程与进程的区别和联系?线程是否具有相同的堆栈? dll是否有独立的堆栈?答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。 DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃

35。unsigned short A= 10; printf("~A=%u\n",~A); char c=128; printf("c=%d\n",c);输出多少?并分析过程答案:第一题,~A=0xfffffff5,int值为-11,但输出的是uint。所以输出4294967285第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。这两道题都是在考察二进制向int或uint转换时的最高位处理。

(二)

1.-1,2,7,28,,126请问28和126中间那个数是什么?为什么?答案:第一题的答案应该是4^3-1=63规律是n^3-1(当n为偶数0,2,4) n^3+1(当n为奇数1,3,5)

2.用两个栈实现一个队列的功能?要求给出算法和思路!答案:设2个栈为A,B,一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),比上面的几种方法要好。

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么?答案:函数名: atol功能:把字符串转换成长整型数用法: long atol(const char*nptr);程序例:#include<stdlib.h>#include<stdio.h> int main(void){ long l; char*str="98765432"; l= atol(lstr); printf("string=%s integer=%ld\n", str, l); return(0);}

4。对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?答案:c用宏定义,c++用inline

5。直接链接两个信令点的一组链路称作什么?答案:PPP点到点连接

7。软件测试都有那些种类?答案:黑盒:针对系统功能的测试白合:测试函数功能,各函数接口

8。确定模块的功能和模块的接口是在软件设计的那个队段完成的?答案:概要设计阶段

9。enum string{ x1, x2, x3=10, x4, x5,}x;问x;答案:取值在0。1。10。11。12中的一个

10。unsigned char*p1; unsigned long*p2; p1=(unsigned char*)0x801000; p2=(unsigned long*)0x810000;请问p1+5=; p2+5=;答案:801005; 810014。不要忘记了这个是16进制的数字,p2要加20变为16进制就是14选择题: 1.Ethternet链接到Internet用到以下那个协议? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.属于网络层协议的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息调度机制是: A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;答案:b,a,c

四.找错题:

1.请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k<=1000;k++) for(j=0;j<250;j++) for(i=0;i<60;i++) a[i][j][k]=0;答案:把循环语句内外换一下

2。以下是求一个数的平方的程序,请找出错误:#define SQUARE(a)((a)*(a)) int a=5; int b; b=SQUARE(a++);答案:这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了 3。typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE*gt_code){ BYTE*gt_buf; gt_buf=(BYTE*)MALLOC(Max_GT_Length);...... if(gt_len>Max_GT_Length){ return GT_Length_ERROR;}.......}答案:要释放内存问答题: 1.IP Phone的原理是什么?答案:IPV6 2.TCP/IP通信建立的过程怎样,端口有什么作用?答案:三次握手,确定是哪个应用程序使用该协议(三)

1、局部变量能否和全局变量重名?答案:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

2、如何引用一个已经定义过的全局变量?答案:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答案:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

4、语句for(;1;)有什么问题?它是什么意思?答案:和while(1)相同。

5、do……while和while……do有什么区别?答案:前一个循环一遍再判断,后一个判断以后再循环。

6、请写出下列代码的输出内容#include<stdio.h> main(){ int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0;}答案:10,12,120 a=10; b=a++;//a=11 b=10 c=++a;//a=12 c=12 d=10*a++;//a=13 d=120

高级题

1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

答案:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。

答案:栈;静态区;堆 3、设有以下说明和定义: typedef union{long i; int k[5]; char c;} DATE; struct data{ int cat; DATE cow; double dog;} too; DATE max;则语句 printf("%d",sizeof(too)+sizeof(max));的执行结果是:______答案:DATE是一个union,变量公用空间.里面最大的变量类型是int[5],占用20个字节.所以它的大小是20 data是一个struct,每个变量分开占用空间.依次为int4+ DATE20+ double8= 32.所以结果是 20+ 32= 52.当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2+ DATE10+ double8= 20

4、队列和栈有什么区别?

答案:队列先进先出,栈后进先出÷

5、这道题目出错了,这里就不写上了。

6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。答案:slnodetype*Delete(slnodetype*Head,int key){}中if(Head->number==key){ Head=Pointer->next; free(Pointer); break;} Back= Pointer; Pointer=Pointer->next; if(Pointer->number==key){ Back->next=Pointer->next; free(Pointer); break;} void delete(Node* p){ if(Head= Node) while(p)}

7、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

1、#include"string.h" 2、main() 3、{ 4、 char*src="hello,world"; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=dest; 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf("%s",dest); 13、 return 0; 14、}答案:还要加上#include<stdio.h> int main(){ char* src="hello,world"; int len= strlen(src); char* dest=(char*)malloc((len+1)*sizeof(char));//要为\0分配一个空间 char* d= dest; char* s=&src[len-1];//指向最后一个字符 while( len--!= 0)*d++=*s--;*d= 0;//尾部要加\0 printf("%s\n",dest); free(dest);//使用完,应当释放空间,以免造成内存汇泄露 return 0;}华为笔试题(3) 2006-09-29 19:41

一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)

1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确)

2、int(*ptr)(),则ptr是一维数组的名字。(错误 int(*ptr)();定义一个指向函数的指针变量)

3、指针在任何情况下都可进行>,<,>=,<=,==运算。(错误)

4、switch(c)语句中c可以是int,long,char,float,unsigned int类型。(错,不能用实形)

二、填空题(共30分)

1、在windows下,写出运行结果,每空2分,共10分。 char str[ ]="Hello"; char*p=str; int n=10; sizeof(str)=() sizeof(p)=() sizeof(n)=() void func(char str[100]){} sizeof(str)=()答案:6,4,4,4,具体解释请参看我的空间里的“C/C++程序员应聘试题剖析”

2、void getmemory(char**p, int num){*p=(char*) malloc(num);} void test(void){ char*str=NULL; getmemory(&str,100); strcpy(str,"hello"); printf(str);}运行test函数有什么结果?()10分答案:输出hello,但是发生内存泄漏。

3、设int arr[]={6,7,8,9,10}; int*ptr=arr;*(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr));() 10分答案:8,

8。这道题目的意义不大,因为在不同的编译器里printf的参数的方向是不一样的,在vc6.0下是从有到左,这里先*(++ptr)后*pt,于是结果为8,8

三、编程题(第一小题20,第二小题30分)

1、不使用库函数,编写函数int strcmp(char*source, char*dest)相等返回0,不等返回-1;

答案:一、 int strcmp(char*source, char*dest){ assert((source!=NULL)&&(dest!=NULL)); int i,j; for(i=0; source[i]==dest[i]; i++){ if(source[i]=='\0'&& dest[i]=='\0') return 0; else return-1;}}答案:二、 int strcmp(char*source, char*dest){ while((*source!='\0')&&(*source==*dest)){ source++; dest++;} return((*source)-(*dest))?-1: 0;}

2、写一函数int fun(char*p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1答案:一、 int fun(char*p){ if(p==NULL) return-1; else{ int length= 0; int i= 0; int judge= 1; length= strlen(p); for(i=0; i<length/2; i++){ if(p[i]!=p[length-1-i]) judge= 0; break;} if(judge== 0) return 0; else return 1;}}答案:二、 int fun(char*p){ int len= strlen(p)- 1; char*q= p+ len; if(!p) return-1; while(p< q){ if((*p++)!=(*q--)) return 0;} return 1;}

1.在OSI 7层模型中,网络层的功能有() A.确保数据的传送正确无误 B.确定数据包如何转发与路由 C.在信道上传送比特流 D.纠错与流控

2.FDDI使用的是___局域网技术。() A.以太网; B.快速以太网; C.令牌环; D.令牌总线。

3.下面那种LAN是应用CSMA/CD协议的() A.令牌环 B.FDDI C.ETHERNET D.NOVELL

4.TCP和UDP协议的相似之处是() A.面向连接的协议 B.面向非连接的协议 C.传输层协议 D.以上均不对 5.应用程序PING发出的是___报文.() A.TCP请求报文。 B.TCP应答报文。 C.ICMP请求报文。 D.ICMP应答报文。

6.以下说法错误的是(多)() A.中继器是工作在物理层的设备 B.集线器和以太网交换机工作在数据连路层 C.路由器是工作在网络层的设备 D.桥能隔离网络层广播

7.当桥接收的分组的目的MAC地址在桥的映射表中没有对应的表项时,采取的策略是() A.丢掉该分组 B.将该分组分片 C.向其他端口广播该分组 D.以上答案均不对

8.LAN Switch在网络层次模型中的地位() A.物理层 B.链路层 C.网络层 D.以上都不是

9.小于___的TCP/UDP端口号已保留与现有服务一一对应,此数字以上的端口号可自由分配。() A.199 B.100 C.1024 D.2048

10.当一台主机从一个网络移到另一个网络时,以下说法正确的是() A.必须改变它的IP地址和MAC地址 B.必须改变它的IP地址,但不需改动MAC地址 C.必须改变它的MAC地址,但不需改动IP地址 D.MAC地址.IP地址都不需改动答案:1.B; 2.C; 3.C; 4.C; 5.C; 6.BD; 7.C; 8.B; 9.C; 10.B.

华为笔试题(4) 2006-09-30 13:00

1.找错 void test1(){ char string[10]; char* str1="0123456789"; strcpy(string, str1);}答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11],这样最后一个元素可以存储字符串结尾符'\0'; void test2(){ char string[10], str1[10]; for(int I=0; I<10;I++){ str1[I]='a';} strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的'\0'才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]='\0',这样就正常了。 void test3(char* str1){ char string[10]; if(strlen(str1)<=10){ strcpy(string, str1);}}答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符'\0'的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。

2.找错#define MAX_SRM 256 DSN get_SRM_no(){ static int SRM_no; int I; for(I=0;I<MAX_SRM;I++,SRM_no++){ SRM_no%= MAX_SRM; if(MY_SRM.state==IDLE){ break;}} if(I>=MAX_SRM) return(NULL_SRM); else return SRM_no;}答:我不知道这段代码的具体功能,但明显有两个错误 1,SRM_no没有赋初值 2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。

请问在java中如何表示集合

Java程序设计基础的笔记

『更新时间:2005-3-6 17:21:05』『推荐』『报错』『咨询』『编辑:Jack Chen』『来源:』

Java程序设计基础的笔记

第1课没有啥好学的,记住下面两点

1、语言的分类(要懂得举例):

1)面向对象程序设计语言:Java,C++,smalltalk

2)过程式程序设计语言:C,Pasal

2、语言的分类

1)解释执行语言:如Java,Basic

2)编译执行语言:如C,C++

第2课

1)Java的特点:

简单性、面向对象、分布式()

健壮性(提供自动垃圾回收机制进行内存管理、提供面向对象的异常处理机制、提供严格的类型检查)

平台无关性、解释执行、安全性(不支持指针)、多线程、动态性(是其面向对象设计方法的扩展)。

2)JAVA的平台技术

Java虚拟机、字节码、即用时装入、JIT(Just in Time)及时编译技术

3)Java源文件必须以扩展名.java保存

编译源文件:javac hello.java执行程序:java hello

第3课面向对象和开发环境建立

1)面向对象:是一种运用对象、类、继承、封装、聚合、消息传递,多态性等概念来构造系统的一种软件开发方法;追求软件对客观世界的直接模拟;

2)面向对象和客观世界的关系

3)对象:软件系统的基本构成单位;代表问题域中的客观事物的抽象表示,在面向对象中,对象是基本的运行实体,包括属性和行为,将属性和行动封装成一个独立的实体;

4)类:对象之上的抽象,类与类的实例之间关系是抽象与抽象之间的关系,类是创建对象的模板;

5)属性和方法:

属性是描述对象的状态;即表示客观事物的静态特性(数据);

方法是描述对象的动作;即表示客观事物的动态特性(对数据的操作集合)

6)消息:对象之间利用消息进行通信,具体体现在一个对象调用另一个对象的方法;

7)面向对象语言的三大特点:封装性、继承性、多态性

封装性:指将属性和方法封装在一起,形成一个能动的实体(对象);

继承性:在不同层次上运用抽象原则,获得类和派生类,源生类可以继承基类的属性和方法。

好处在于:体现层次关系,减少代码数据冗余、增加可重用性;

多态性:向不同的对象发送同一消息,根据对象类的不同而完成不同的行为;

多态是通过继承机制来实现的。

第4节课建立开发环境(很简单的)

1、配置开发环境

1)安装操作系统:win2000/XP/NT

2)安装JDK1.3或是JDK1.4

3)打开环境变量设置窗口

[开始][设置][控制面板][系统][高级][环境变量]或是[系统变量]

4)配置Path环境变量:值应为c:\Jdk1.3.1\bin--编译路径

5)配置ClassPath环境变量:--->类路径

值应为.;c:\jdk1.3.1\lib\tools.jar;c:\jdk1.3.1\lib\dt.jar

6)打开一个命令窗口

7)测试安装是否成功

第5节课 Java语言基础

1)Java的输入输出:字符界面输出、图形界面输出-->本文是前者;

2)记住输入输出的编程语句:

首先要引用import java.io.*;

System.out.println(输出内容);

System.in.read();读取一个字符;(字符必须进行初始化,char c=\0)

3)注释方式:三种

//单行注释:从“//”开始一直到行尾均为注释

/*一行或多行的注释*/

/**文档注释*/

第6节课类型、常量、变量

1)标识符:变量、常量、类、方法的名称都是标识符。

它的组成是有四种:字母、数字,_和$,标识符的开头字符不能以数字开头。

2)Java中标识符需要注意的地方:

保留字或关键字不能作为标识符;

标识符区别大小写;

数字不能开头;

标识符不能含有其他字符;

3)关键字、保留字:请见书上的17页;有印象就可以了。编程时稍注意一点就可以。

4)Java数据类型:基本数据类型和复合数据类型;

基本数据类型:共有8种,分为4小类;分别为逻辑型(boolean)、字符型(char)、整型

(byte,short,int,long)和浮点型(float,double)

复合数据类型:类、数组、接口

5)Java基本数据类型

每一种类型都是有默认值的(整型=0,浮点型=0.0布尔类型=false,字符类型=\u0000)

size是平台独立的(不运行在硬件上,而是虚拟机上),各种类型的长度大小:

byte=8;short=16;int=32;long=64;float=32;double=64;char=16;boolean=8

6)变量:指在程序运行过程中可以改变的量,由类型、变量名、变量值三要素组成;

常量:一旦赋了初值,就不能再改变的量,定义常量要使用关键字final.

7)整型常量:十进制整数、八进制整数(以0开头)、十六进制整数(以0x开头)

字符常量:用一对单引号括起来的一个字符。

转义字符:反斜线后面跟上一个字符,\n换行\r回车\b退格\t水平制表<TAB>\0空

字符串常量:用一对双引号括起来的一个字符序列。

注意:字符串常量和字符常量的区别:

A表示形式不同;B在内存中存储空间不同;C操作不同;D存放两者的变量不同;

8)数组的特点:A、是同类元素的有序集合;B、其元素可用下标访问;C、连续存放;

所有数据类型都可以作为数组的元素,Java的基本工具包(java.util)中有许多类能实现多种类型的数组。

9)数组的定义方法:

A、int[]数组名或 int数组名[]分配空间时则是在程序中:数组名=new int[10];

B、int[]数组名=new int[10];

第七章运算符、流程控制

1)算术运算符:用来定义整型和浮点型数据的算术运算,分为单目,双目和赋值运算符;

单目:

双目:+、-、*、/,%只对整型运算有效

2)关系运算符:>、<、>=<===!=

注意:区分=(赋值)和==(判断)的差别

不能在两个浮点数之间进行==的比较

=、==、!=都能对object reference进行操作

String类支持+和+=

3)逻辑运算符:&&与、||或、!非

4)位运算符(以二进制位进行运算,操作数和结果都是整型数据):

~位反、|位域、&位与、^位异或、>>右移、<<左移、>>>右移,左边空出位填零

5)三目运算符 int x=1,y=2,z=3;int i=x<0?y:z;//i的取值是3

6)运算符注意事项:A、运算符的优先级;B、运算符的结合性;具体见P27;

第八节课流程控制

建议看书本,内容不多

具体结构摘抄如下:

1)if语句:

if{}

或if{} else{}

或if{} else if{} else if{}... else if{} else{};

2)Switch语句:

Swith(条件表达式){

case判断值1:语句组1

case判断值2:语句组2

...

case判断值n:语句组n

default:语句组n+1;

}

3)for(表达式1;表达式2;表达式3)

循环体;

4)while(条件表达式)循环体;

5)do...循环体... while(条件表达式);

6)break;//不带标签;

break label//带标签;

7)continue;//不带标签;

continue label;//带标签;

第9节课类和对象

1)什么是面向对象?

面向对象是一种新的程序设计范畴,一种新的编程方法;她运用对象、类、继承、封装、聚合、消息传递,多态性等概念来构造软件系统。她追求对客观世界的真实模拟、体现,提高了程序的重用性。

2)什么是对象?

对象是面向对象软件系统中的基本构成单位,代表问题域中的客观事物的抽象表示。

在面向对象中,对象是基本的运行实体,包括属性和行为。将属性和行为封装成一个独立的实体。

3)什么是类?

类是对象之上的抽象,类与对象(类的实例)之间的关系是抽象与具体的关系,类是创建对象的模板;

4)类的一般定义形式

修钸符 class类名[extends父类名][implements接口1,接口2,...]{

修钸符类型成员变量1;

修钸符类型成员变量2;

修钸符类型成员方法1(参数列表){

类型局部变量

方法体

}

...

}

5)对象如何创建

定义一个对象的引用String s1;

创建一个对象实例:使用关键字new;例如String s1= new String(字符串内容);

6)对象实例 VS对象引用

.通过引用操纵对象.引用不等于对象

.引用保存在堆栈里,对象保存到堆里面

.对于句柄,一种安全的方法就是创建一个引用时就进行初始化

第10课

1)构造函数:通过一个new创建一个类的实例,通过调用构造函数来完成初始化操作;

它的特点:构造函数名字和类完全相同。

构造函数没有返回值,不需要用void

构造函数可以重载。

2)函数重载:使得一个函数名可以对应不同的实现;

实现它的要求:函数参数的类型、函数参数个数、函数参数的顺序不同

仅仅返回值不同是不能实现函数重载的。

在编译时根据函数调用的形式选择适当的重载函数

3)每个类都至少有一个构造方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法

默认构造方法的参数列表及方法体均为空。

4)对象的清除

Java引入了新的内存管理机制,由Java虚拟机担当垃圾收集器的工作,你可以任意创建对象而不用担心如何清除它们,垃圾收集器会自动清除它们的。

使用new操作符创建对象后,Java虚拟机自动为该对象分配内存并保持跟踪。Java虚拟机能判断出对象是否还被引用,对不再被引用的对象释放其占用的内存。这种定期寻找不再使用的对象并自动释放对象占用内存的过程称为垃圾收集。

第11课关键字

1)static关键字:指其属性和方法不需要类的实例化,可以用类直接调用。适用于属性和方法。

类方法可能通过一个类进行调用,而不需要进行实例化出一个对象。

double root=Math.sqrt(453.0);即静态属性和方法可以用类名直接调用,如System.out.println();

2)final关键字:它是最终修shi符,适用于属性、方法、类。

对于基本数据类型、final将值变成一个常数;

对于对象引用时,final将引用变成一个常数,即进行声明时,必须将引用初始化到一个具体的对象,而且永远不能将引用变成指向另一个对象。然而对象本身是可以修改的。

对于数组,类似对象引用,不能重新指向,但数组中的对象并不是常量。

它的作用:A、是防止一个方法的行为在继承期间被覆盖或重写。

B、不希望这个类有子类,所以一个final类中的所有方法都默认为final.

C、

3)数组的定义和初始化 int x[]={5,2,0}

float fArray[]= new float[10];

第12课构架函数P71

1)什么是访问控制?

在java中,类,属性,方法,接口等都需要访问控制修饰符,它明确指定类,属性,方法,接口的作用域和可见性。即它们可以被程序的哪些部份访问的调用。

2)为什么要使用访问控制符?

它可以使程序结构清晰,严谨。类的使用更加安全,体现封装的概念。

3)访问控制级别:包、类访问控制、成员访问控制

包:

在Java中,将完成相同功能的一组类(.class)组成一个集合,放在一个包中。

通过包,将各种类按照层次组织在一起,使程序的功能结构十分明确,清晰。

如何定义包?

package myFirstPackage

注意:package必须放在一个java文件的最开始。

如何使用一个包中的类?

import java.awt.*

import java.awt.Button

注意:import语句放在package语句之后,任何class定义之前。

包的层次

一个包可由若干个类和子包构成。

当带有包的时候,正确的编译运行程序方式为:java-d.HelloWorld.java

当不带有包的时候,正确的编译运行程序方式为:java HelloWorld.java

第14课(继上节课)类访问控制符

1)类的访问控制符包含:

.public表示它可能其他所有的类访问和引用,通过它的实例来访问对象的可见属性和方法

.友好的(默认的)表示该类只能被同一个包中的类访问和引用,而不可以被其他包中的类访问和使用。

注:Java中规定,一个.java文件中必须有一个且只有一个public类,因而文件中的其他类只能是友好级别。含有main()方法的类一定是public类

2)成员访问控制符

.public:公有成员,可以被任何类访问,应慎用。

.private:私有成员,只能被访类的方法访问。它提供最高级别的访问。

.protected:保护成员,它能被同一个包中的其他类和任何包中的子类访问。

.友好的(默认的):同一个包那的类都可以访问它;

3)Java应用程序结构

一个可运行的java程序可以包含:多个包、多个.java源文件

一个.java源文件可以包含多个类;

若一个.java源文件包含n个类(class),则编译后生成n个.class文件。

第15课继承性

1)什么是继承?

通过在不同层次上进行抽象,得到子类(基类)和父类(派生类),子类可以继承父类的非私有属性和方法,即继承基类的特征和能力。

注意:Java不支持多重继承(即不允许一个类有多个直接父类);

2)继承的好处:

继承体现出类的层次关系

减少代码冗余,增加软件复用性

降低软件开发时间,提高软件维护效率

3)继承的一般定义形式

class subclass extends baseclass{....}

第16课

子类的方法不能访问父类的私有成员。

1)子类如何初始化从父类继承而来的属性

a、在派生类的构造函数中没有指明基类的构造函数时,JAVA会自动在第一行加入对基类构造函数的默认调用

super()语句;

b、当基类的构造函数需要参数时,则一定要在派生类的构造函数第一条语句明确调用基类代参数的构造函数

super(agrs)。

c、当基类的构造函数不需要参数时,则在派生类的构造函数中可以不明确的调用super();

2)super和this关键字

super:如果要在子类中调用父类的方法或者访问父类的属性时,则应该是super.methodname();

第17课多态性

1)什么是多态性?

向不同对象发送同一消息,不同类型的对象产生不同的行为,多态是通过继承机制实现的。

2)什么是重载?

函数名相同,但是函数的参数类型、参数个数、参数顺序不同。

第18课抽象类

抽象类和抽象方法

1)定义格式:

abstract class instrument{

abstract public void play();

}

注意:1、在一个方法之前加上abstract关键字,且方法体的代码为空,则这个方法就成为抽象方法了。

2、抽象类不能实例化;

3、如果一个类包含一个抽象方法,则这个类必须被声明为抽象类。

2)接口定义

modifier interface interface_name

{varbletype variblename1....

returntype method1(params);

}

注意:接口的访问类型同类的访问类型。可以用public或者缺省为包级别的。

接口可以有数据成员,但接口中的数据成员隐藏含是public、static、final。

接口的方法定义是public、abstract,不能是private protected

3)接口使用

1.一个类如果要实现一个接口,就必须实现接口中的所有方法;

2.一个类如果只是实现接口中的部份方法,则一定要标明这个类是抽象类。

3.一般能用接口的就不用抽象类,只有当需要方法定义或成员变量时才用抽象类。

5.接口可以继承,使用关键字extends。

6.一个类如果实现一个继承其他接口的接口,则这个类必须实现这个接口和它的基类接口的所有方法;

7.在Java中,子类和父类只能是单重继承关系,如果要实现多重继承,则需要用到接口。

第19课 Exception

1)对于编程人员,错误分成编译错误和运行错误。

2)什么是Exception?

指在程序运行过程中出现的一些意料之外的错误。

Exception机制:就是用来在发生异常时,告诉程序如何控制自身的运%

java线段类,两个顶点,求线段长度,哪里不对呢

1)本文列出的名单是根据我自己的调查,并结合个人的经验。有可能是它们不恰恰是最流行的,但至少众所周知的。

2)我会不断更新这个列表,使之更加完整和准确。感谢您的意见。

一个典型的Java项目依赖于第三方库。本文总结的Java库适用于各种应用,比较流行并且广泛使用。其中一些还提供简单的示例(来自ProgramCreek)。

Java SDK肯定是使用最广的库,所以本文的名单焦点是流行的第三方库。该列表可能并不完善,所以如果你觉得有什么应该出现在列表中的,请留下您的评论。非常感谢!

1、核心库

Apache Commons Lang:来自Apache的核心库,为java.lang API补充了许多常用的工具类,如字符串操作、对象的创建等。

Google Guava:来自谷歌的核心库,包括集合(Collection)、缓存(Caching)、支持原语(Primitives)等。(示例)

2、HTML、XML Parser

Jsoup:一个简化了的 HTML操作的库。(示例)

STaX:一组可以高效处理 XML的API。(示例)

3、Web框架

Spring:Java平台上众所周知的开源框架和依赖注入容器。(示例)

Struts2:来自Apache的流行Web框架。(示例)

Google Web Toolkit:Google提供的开发工具库,主要用于构建和优化复杂的Web程序用。(示例)

Strips:使用最新Java技术构建的Web程序框架,推荐使用。

Tapestry:面向组件的框架,用于使用Java创建动态、健壮、扩展性高的Web应用程序。

请猛击这里查看以上面框架之间的比较。

4、图表、报表、图像

JFreeChart:用于创建如条形图、折线图、饼图等图表。

JFreeReport:创建于输出PDF格式的报表。

JGraphT:创建图像,其中只包含由线段连接的点集。

5、窗口

Swing:SDK提供的GUI库。(示例)

SWT:Eclipse提供的GUI库。

SWT与Swing的比较。(链接)

6、GUI框架

Eclipse RCP。(示例)

7、自然语言处理

OpenNLP:来自Apache的自然语言处理库。(示例)

Stanford Parser:斯坦福大学提供的自然语言处理库。(示例)

如果你是一名NLP专家,请猛击这里查看更多工具库介绍。

8、静态分析

Eclipse JDT:由IBM提供的静态分析库,可以操作Java源代码。(示例)

WALA:可以处理jar包文件(即字节码)的工具库。(示例)

9、JSON

Jackson:用于处理JSON数据格式的多用途的Java库。Jackson旨在快速、准确、轻量、对开人员友好之间找到最好的平衡点。

XStream:一个简单用于对象和XML互相转换的库。

Google Gson:一个专门用于Java对象和Json对象相互转换的工具库。(示例)

JSON-lib:用于 beans、maps、collections、java arrays、XML和 JSON之间相互转换操作的工具库。

10、数学

Apache Commons Math:提供数学计算和数值统计需函数的工具库。

11、日志

Apache Log4j:风行一时的日志记录操作库。(示例)

Logback:当前流行的log4j项目的继任者。

SLF4J(The Simple Logging Facade for Java):各种日志框架的一个简单的外观或抽象(如java.util.logging、logback、log4j等),允许用户在部署时加入需要的日志框架。

12、Office

Apache POI:利用其提供的APIs,可以使用纯Java代码操作各种基于微软OLE2合成文档格式的文档。

Docx4j:一个用于创建、操作微软公开的XML文件的库(支持Word docx、 Powerpoint pptx和Excel xlsx)。

13、日期和时间

Joda-Time:如有质量问题包退包换的Java日期和时间类。

14、数据库

Hibernate、EclipseLink、JPA

JDO

jOOQ

SpringJDBC、Spring Data

Apache DbUtils

15、开发工具

Lambok:旨在减少代码编写的Java开发库。

OK,本文到此结束,希望对大家有所帮助。

晓年的作者简介 晓年的作者简介主要作品64位java需要什么系统?Windows 8 系统 64位 适合安装哪个Java版本