本文目录一览:
C语言链表排序问题
别的不敢说,但你的程序中有个致命错误,就是没有给结构体指针*first = NULL; *temp等分配空间,就访问他们了。
你自己看下我以前写的程序,有排序的
#include stdio.h
#include stdlib.h
typedef struct node
{
char num[10];
char name[10];
int score[5];/*score[0]存数学成绩score[1]语文成绩score[2]英语成绩score[3]总分score[4]平均分*/
struct node *next;
}student;/*学生成绩结构体*/
/*初始化结构体*/
student *init(student *t)
{
t=(student *)malloc(sizeof(student));
t-next=NULL;
t-score[4]=t-score[3]=t-score[0]=t-score[1]=t-score[2]=0;
return t;
}
/*保存数据*/
void save(student *stu)
{
FILE *fp;
if((fp=fopen( “score1″,”w”))==NULL)/*为输出打开文件score1*/
{
printf(“cannot open file\n”);exit(0);
}
stu=stu-next;
while(stu!=NULL)
{
if(fwrite(stu,sizeof(student),1,fp)!=1)
printf(“file write error\n”);
stu=stu-next;
}
fclose(fp);
}
/*读取数据*/
student * load(student *stu)
{
FILE *fp;student *p,*r;r=stu;
if((fp=fopen(“score1″,”r”))==NULL)/*为输入打开文件score1*/
return stu;
do
{ p=(student *)malloc(sizeof(student));
p-next=NULL;
if((fread(p,sizeof(student),1,fp)!=1)){fclose(fp);return stu;};
r-next=p;
r=r-next;
}while(1);
}
/*输出一个特定的学生的成绩*/
void output1(student *t)
{ int k;
printf(“%s\t%s\t”,t-num,t-name);
for(k=0;k5;k++)
printf(“%d\t”,t-score[k]);
printf(“\n”);
}
/*输出全体学生的成绩*/
void output(student *stu)
{
stu=stu-next;
printf(“学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n”);
while(stu!=NULL)
{
output1(stu);
stu=stu-next;
}
}
/*将stu后插在t中*/
student * charu(student *stu,student *t)
{student *p;int k;
p=(student *)malloc(sizeof(student));
strcpy(p-num,stu-num);
strcpy(p-name,stu-name);
for(k=0;k5;k++)
p-score[k]=stu-score[k];
p-next=t-next;
t-next=p;
return p;
}
/*按成绩排序*/
void paixu(student *stu,int i)
{
student *t,*p,*r;
int j,k;p=stu;
printf(“输入0按数学成绩\n”);
printf(“输入1按语文成绩\n”);
printf(“输入2按英语成绩\n”);
printf(“输入3按总分\n”);
printf(“输入4按平均分\n”);
do
{
scanf(“%d”,j);
if(j0j4) printf(“输入错误请重新输入\n”);
else break;
}while(1);
t=init(t);
r=t;
stu=stu-next;
if(t-next==NULL)
r=charu(stu,t);/*在排序好的链表t中插入第一个节点*/
if(i==0)/*按升序排序*/
while(stu-next!=NULL)
{
stu=stu-next;
if(r-score[j]stu-score[j]) r=t;/*如果待插入的score[j]当前的score[j],指针r回溯*/
while(r-next-score[j]stu-score[j]r-next!=NULL)
r=r-next;/*找到比待插入的score[j]大的指针r-next*/
r=charu(stu,r);/*在r后面插入stu*/
}
else
while(stu-next!=NULL)
{
stu=stu-next;
if(r-score[j]stu-score[j]) r=t;
while(r-next-score[j]stu-score[j]r-next!=NULL)
r=r-next;
r=charu(stu,r);
}
output(t);
}
/*排序菜单*/
void output2(student *stu)
{ int i;
output(stu);
printf(“输入 0 升序\n”);
printf(“输入 1 降序\n”);
printf(“输入其他任意字符退出\n”);
scanf(“%d”,i);
if(i==0||i==1)
paixu(stu,i);
printf(“输入任意字符结束\n”);
getch();
}
/*查找学生号为num是否存在*/
student * findnum(char *num,student *t,int *i)
{
*i=1;
if(t-next==NULL)
return t;
else
{
*i=strcmp(t-next-num,num);
while(*i0)/*t-next-numnum时查找下一个*/
{
t=t-next;
if(t-next==NULL)
return t;
*i=strcmp(t-next-num,num);
}
}
return t;/*t-next-num=num时返回,此时i=0*/
}
/*插入一个学生信息*/
student * insertstu(char *num,student *stu,char *name)
{ student *p,*t;int *i,j;i=j;
t=findnum(num,stu,i);/*查找该学号是否存在*/
if(j!=0)/*该学号不存在,则插入*/
{
p=init(p);
strcpy(p-num,num);
strcpy(p-name,name);
p-next=t-next;
t-next=p;
return stu;
}
else
{printf(“已有此学号\n学号\t姓名\n%s\t%s\n”,t-next-num,t-next-name);return stu;}
}
/*录入新学生信息*/
void base(student *stu)
{
char num[10],name[20];
printf(“输入e结束输入新学生的信息\n”);
printf(“num(不超过10个数)\tname(不超过10个字)\n”);
scanf(“%s”,num);
do
{
printf(“\t\t\t”);
scanf(“%s”,name);
stu=insertstu(num,stu,name);/*插入一个学生信息*/
scanf(“%s”,num);
}while(num[0]!=’e’);
output(stu);
printf(“输入任意字符退出\n”);
getch();
}
/*增加修改一门课程成绩*/
void zengjia(student *t,int i)
{
t-score[3]-=t-score[i];/*总分减去第i门课的成绩*/
scanf(“%d”,(t-score[i]));/*输入第i门课的成绩*/
t-score[3]+=t-score[i];/*总分加上第i门课的成绩*/
}
void deletegrade(student *t,int i)
{
t-score[3]-=t-score[i];/*总分减去第i门课的成绩*/
t-score[i]=0;/*第i门课的成绩归零*/
}
/*修改成绩*/
void altergrade(student *stu)
{
int j,*i;student *t;char a,*num;
i=j;
printf(“0 修改数学成绩\n”);
printf(“1 修改语文成绩\n”);
printf(“2 修改英语成绩\n”);
printf(“3 删除数学成绩\n”);
printf(“4 修改语文成绩\n”);
printf(“5 修改英语成绩\n”);
printf(“输入 e 结束操作\n”);
a=getch();
printf(“学号\t成绩\n”);
scanf(“%s”,num);
while(num[0]!=’e’)
{
t=findnum(num,stu,i);/*按学生号查找学生信息*/
if(j==0)/*学生号存在*/
{
t=t-next;
switch(a)
{
case ‘0’:
zengjia(t,0);
break;
case ‘1’:
zengjia(t,1);
break;
case ‘2’:
zengjia(t,2);
break;
case ‘3’:
deletegrade(t,0);
break;
case ‘4’:
deletegrade(t,1);
break;
case ‘5’:
deletegrade(t,2);
break;
default:break;
}
t-score[4]=t-score[3]/3;
}
else
printf(“无此学号\n”);
scanf(“%s”,num);
}
output(stu);
printf(“输入任意字符结束\n”);
getch();
}
/*第i科成绩录入*/
student gradeenter(student *stu,int i)
{
student *t;t=stu;
t=t-next;
printf(“学号\t该科成绩\n”);
while(t!=NULL)
{
printf(“%s\t”,t-num);
if(t-score[i]==0)/*如果学号为t-num的同学该科成绩没有*/
{
scanf(“%d”,t-score[i]);
t-score[3]+=t-score[i];/*学号为t-num的总分*/
t-score[4]=t-score[3]/3;/*学号为t-num的平均分*/
}
else
printf(“%d\n”,t-score[i]);
t=t-next;/*录入下一个同学的该科成绩*/
}
printf(“该科全部输入完成\n输入任意字符结束\n”);
getch();
}
/*成绩录入菜单*/
void entergrade(student *stu)
{
int i;
printf(“0 录入数学成绩\n”);
printf(“1 录入语文成绩\n”);
printf(“2 录入英语成绩\n”);
scanf(“%d”,i);
switch(i)
{
case 0:gradeenter(stu,i);break;
case 1:gradeenter(stu,i);break;
case 2:gradeenter(stu,i);break;
default:printf(“输入错误请输入相应操作的题号\n”);
}
}
/*按学生号查找学生*/
void chaxun(student *stu)
{
char *num;int j,k,*i;student *t;i=j;
printf(“输入要查询的学生学号\n”);
scanf(“%s”,num);
t=findnum(num,stu,i);/*查找学生号为num是否存在*/
if(j==0)/*该学生号存在*/
{
t=t-next;
printf(“查询结果为\n”);
printf(“学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n”);
output1(t);/*输出此学生信息*/
}
else
printf(“查无此号\n”);
printf(“输入任意字符结束\n”);
getch();
}
/*统计全班人数和平均分*/
void tongji(student *stu)
{
int total=0,score=0;
stu=stu-next;
while(stu!=NULL)
{
score+=stu-score[3];
stu=stu-next;
total++;
}
score=score/total;
printf(“班级总人数为:%d平均分为:%d\n输入任意字符退出\n”,total,score);
getch();
}
/*按分数段查询*/
void fenshuduan(student *stu)
{
int i,min,max,j;
printf(“输入0按数学分数段\n”);
printf(“输入1按语文分数段\n”);
printf(“输入2按英语分数段\n”);
printf(“输入3按总分分数段\n”);
printf(“输入4按平均分分数段\n”);
scanf(“%d”,i);
printf(“输入分数段上限:”);
scanf(“%d”,max);
printf(“\n输入分数段下限:”);
scanf(“%d”,min);
if(maxmin)
{j=max;max=min;min=j;}
stu=stu-next;
printf(“学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n”);
while(stu!=NULL)
{
if(min=stu-score[i]stu-score[i]=max)/*将分数段内的同学信息输出*/
output1(stu);
stu=stu-next;
}
}
void main()
{
char a=’8′;
student *stu;
stu=init(stu);/*初始化stu*/
stu=load(stu);/*读取score1的数据*/
while(a!=’7′)
{
clrscr();
printf(“************************************************************\n”);
printf(” 学生成绩管理系统\n”);
printf(” ——-made in china\n”);
printf(” \t0 录入学生基本信息\n”);
printf(” \t1 修改或删除学生成绩\n”);
printf(” \t2 录入学生成绩\n”);
printf(” \t3 显示指定学生的信息\n”);
printf(” \t4 输出指定分数段的学生信息\n”);
printf(” \t5 输出班级总人数和平均分\n”);
printf(” \t6 输出全体学生的信息\n”);
printf(” \t7 退出\n”);
printf(“*************************************************************\n”);
a=getch();
switch(a)
{
case’0′:base(stu);break;
case’1′:altergrade(stu);break;
case’2′:entergrade(stu);break;
case’3′:chaxun(stu);break;
case’4′:fenshuduan(stu);break;
case’5′:tongji(stu);break;
case’6′:output2(stu);break;
case’7′:break;
default:printf(“i am sorry to hear that you enter the wrong num\n”);
printf(“按任意键重新输入\n”);getch();continue;
}
}
save(stu);/*将数据保存在score1中*/
printf(“欢迎再次使用学生成绩管理系统……..请按任意键退出…….”);
getch();
}
.NET的学习步骤,先学什么,用什么书?
基本常识
掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET。 ASP.NET是一个全面向对象的技术,那绝对学不下去!
第一步 对.NET Framework类库有一定的了解 可以通过开发Windows Form应用程序来学习.NET Framework。ASP.NET是建构在.NET Framework之上的技术,你对.NET Framework了解得越深,学习ASP.NET就越快。 举个例子:下面简单列出几个对掌握ASP.NET非常重要的概念: 对象的内存模型,委托,事件,多线程,程序集和应用程序域,安全模型 .NET Framework当然还有许多其它的东西,但不理解与把握清楚上述这些东西,是很难真正把握ASP.NET的。 出于急迫的心情与现实的考虑,不少人没有扎实的面向对象基础就想直接学习ASP.NET,其结果只能是欲速则不达。 在具备了OO基础之后,以下是具体的学习ASP.NET技术步骤。 第一步:学习HTML与CSS 这并不需要去学一大堆的诸如Dreamweaver,Firework之类的各种网页设计工具,关键是理解HTML网页嵌套的block结构与CSS的box模型。许多ASP.NET控件最后都必须转化为HTML。而且,div+CSS是当前主流的网页布局模型。 学习这部分时,关键在于理解概念,而不需要将精力花在美化页面的许多技巧上,那是网站美工的工作,不是程序员的工作。
第二步:学习JavaScript JavaScript不是Java,它主要运行于浏览器端。可以完成许多工作,功能也很强大:比如它将客户端网页中的HTML元素看成一棵树,可以编写代码访问并修改树节点,动态生成新的HTML代码,从而达到动态修改网页显示特性的目的。 JavaScript在目前的网站开发中用得很多,非常重要。 另外,它也是目前非常流行的AJAX技术的基础。
第三步:学习计算机网络原理 找一本大学计算机网络教材,重点看看它的有关互联网的部分,了解一些域名解析和HTTP协议等知识。这是进行互联网开发的理论基础。
第四步:学习ASP.NET表示层技术,会设计Web页面 需要结合先前打好的面向对象技术的基础,至少掌握以下内容:
(1) 各种Web控件的使用方法,
(2) 理解信息在网页中的传送方式,比如Cookie,ViewState,Session等的使用。
(3) ASP.NET应用程序与网页的生命周期,以及相关对象(比如httpcontext,response,request)的用途。
(4) ASP.NET实现事件驱动的内幕
(5) 自定义用户控件 再次强调一下,没有OO基础,很难掌握上述技术,就只能被这些东东牵着鼻子走了,会很被动。
第五步 掌握数据库技术 具体地说,要学习以下内容:
(1) 学会使用SQL Server 2005:不要求精通它的各种工具与管理配置技术,但至少知道如何连接,如何建表,如何创建存储过程
(2) 学习ADO.NET,掌握使用代码人工访问数据库(别用VS2005的向导)的方法
(3) 学习数据绑定控件的使用
第六步 理解多层架构 这时,先前在OO学习阶段涉及到的程序集与应用程序域等就派上用场了,现在,网站架构大多采用多层架构:表示层、业务逻辑层、数据存取层以及数据库本身。 可以先上网找一此多层架构的资料看,再找一个现成的比较复杂的开源ASP.NET项目分析一下其架构就差不多了。基本上都是一个套路,到处应用。 有的朋友问:学习架构是不是必须学习设计模式。 我的看法是:不必!当然,你如果学习过设计模式,那当然更好。但在实际开发中,如果只想着机械地套用某种模式,反而起不到好的结果。我的观点:在学习设计模式时要多思多悟,其思想就会渐渐地融入你的大脑,在真实的设计实践中,忘掉所有的写在书上的模式,一切从实际出发,相信你的直觉,只要达到设计要求的方案就是可行的方案,事实上,你这样做了之后,回过头来再看,会发现你的设计往往暗合设计模式的理论。
第七步 学习XML与Web Service 先了解XML的基础知识,找本讲XML的书看一下就差不多了,然后,再学习Web Service。Web Service其实可类比为远程方法调用(以XML格式表达的调用信息)。 学 到了这里,如果你还有兴趣,不妨再去看看SOA,不过SOA的资料都是理论与概念,看起来比较郁闷,而且离实际开发可能比较远。所以,这是可选项。
第八步 学习AJAX 学习AJAX的主要目的是创建具有更丰富特性的Web表示层,而经过前面七步的学习,到此再学习AJAX已水到渠成,所有的基础都已具备,不会有太大的问题了。 在基础未具备的前提下直接学AJAX,就象“浮沙之上筑高台”,所以,将AJAX的学习次序安排在这里。
第九步 学习RIA技术 RIA:Rich internet application,可看成是将C/S与B/S优点合二为一的尝试。就具体技术来说,主要指微软的Silverlight(WPF_E),毕竟前头一路行来都是微软路线。
参考书籍
1.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:Microsoft .NET框架程序设计(修订版)
作者:Jeffrey Richter
译者:李建忠
出版日期:2003 年11月
出版社:清华大学出版社
推荐理由:框架设计是我看的第一本真正意义上的.NET书籍,之前看过很多,但都是工具类的。如果仅仅把.NET作为开发程序的工具,那些书就足够了。但是.NET绝不仅仅是个工具,它是一种思想、一个平台。要想深入学习,必须对其Framework有所了解。《Microsoft .NET框架程序设计(修订版)》无疑是学习.NET Framework最好的一本。李健忠老师的翻译通俗流畅,并且字里行间流露着他对.NET的深刻理解。这本书陪伴我度过了研究生期间很多无聊的课程。不过初学者看这本书开始也许会很费劲,有一次一个同搞.NET的同学拿过去翻了翻就扔给了我,说:看不懂。
2.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:重构:改善既有代码的设计(中文版)
作者:Martin Fowler
译者:侯捷,熊节
出版日期:2003 年9月
出版社:中国电力出版社
推荐理由: 重构,这个既简单又深奥的概念直到现在仍然吸引着广大设计爱好者。几年前当我几乎被这个名词弄晕的时候,我找到了这本书——重构的诞生地。它同样是我的“课堂书籍”。与《框架设计》不同的是,它的概念和理论十分简单,即使对编程只有一点点的认识,也能很惬意的阅读本书。因为它所阐述的,就是我们程序员平时所做的——修改代码。但如何更好的修改,使其更符合OO标准,又是一个非常复杂的过程。
3.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:敏捷软件开发:原则、模式与实践
作者:Robert C. Martin
译者:邓辉
出版日期:2003 年9月
出版社:清华大学出版社
推荐理由: Bob大叔最脍炙人口的作品。如果你看过《设计模式》与《重构》,那么推荐你接着看这本,对于设计模式的理解就会上升一个层次。熟练掌握各种设计原则,我们就不必再死记那些刻板的模式。只要我们的设计复合原则,就是一个良好的设计。《设计模式》、《重构》和《敏捷软件开发》是设计爱好者必读的三本书。
4.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:ASP.NET 2.0揭秘
作者:Stephen Walther
译者:谭振林,黎志,朱兴林,马士杰
出版日期:2007 年10月
出版社:人民邮电出版社
推荐理由:将近一年没有搞ASP.NET了,因此这本书买来也束之高阁。但此书1.1版本却令我印象深刻。当年就是那本绿皮的《ASP.NET揭秘》把我领进了ASP.NET的殿堂。我甚至一度认为其它的ASP.NET书都是垃圾(特别是清华大学出版的Wrox的红皮书,其实是翻译的太烂)。虽然2.0版本的中文版姗姗来迟,但是我仍然认为它值得收藏。特别是四位国内MVP的加盟,一定不会让人失望。越来越多的技术高手加入到写书译书的队伍中来,会彻底改变国内翻译书籍没法看的尴尬局面。
5.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:Head First设计模式(中文版)
作者:Eric Freeman,Elisabeth Freeman,With Kathy ierra,Bert Bates
译者:O’Reilly Taiwan公司
出版日期:2007 年9月
出版社: 中国电力出版社
推荐理由:这是一本让人拍案叫绝的书,它用浅显风趣的语言和别具一格的表现形式,把《设计模式》中天书一般的理论展现的精妙绝伦。如果你对设计模式还一知半解,或被《设计模式》中晦涩的文字搞得晕头转向,那么赶快来阅读本书吧。然而从某种意义上说,《Head First设计模式》是一本不能看的书,因为你一旦看过,会对其它的书倍感失望。所谓曾经沧海难为水是也。
6.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:重构与模式
作者:Joshua Kerievsky
译者:杨光,刘基诚
出版日期:2006 年12月
出版社:人民邮电出版社
推荐理由:很遗憾,我是在看完《Head First设计模式》后看得这本书,因此对其语言的易读性很是失望。甚至一度把它放回了书架上。但是这并不代表它不是一本经典书。它将重构与模式完美的结合,使我们明白了设计是按照设计原则将代码重构成模式的过程。
7.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:C#和.NET 2.0 实战:平台、语言与框架
作者:Patrick Smacchia
译者:施凡,李永伦,谭颖华,徐宁
出版日期:2008 年1月
出版社:人民邮电出版社
推荐理由:不管你使用什么语言进行开发,都希望手头有一本大而全的参考书。否则东一本框架、西一本语法,南一本WinForm,北一本ASP.NET,会把人搞得很崩溃。尽管Google和百度在绝大多数情况下可以解决问题,但是万一没有网络呢?《C#和.NET 2.0 实战》就是这样一本书,它包罗.NET的万象,编程时遇到任何问题都可以先翻开本书寻找答案。如果你是一个.NET程序员,案边放这样一本书是再适合不过了。我在读书小组推荐过这本书。
8.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:企业应用架构模式
作者:Martin Fowler
译者:王怀民,周斌
出版日期:2004 年7月
出版社:机械工业出版社
推荐理由: 秉承Martin Fowler一贯的通俗易懂的写作风格,用最浅显的语言描述复杂的概念。书中所列举的各种模式,我们肯定都或多或少使用过。本书是分层设计的指导书。
9. 推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:.NET 设计规范——.NET约定、惯用法与模式
作者:Krzysztof Cwalina,Brad Abrams
译者:葛子昂
出版日期:2006 年7月
出版社: 人民邮电出版社
推荐理由: 你是否修改过别人的代码?你是否因为混乱的命名规则和晦涩的变量名称抓狂?如果所有.NET程序员都读过《.NET 设计规范》,这一切也许就不会发生了。它虽然名称为“Framework Design Guidelines”,但实际上不仅仅是指导我们如何编写框架,它本身就是.NET Framework的设计规范。我们平时在做任何开发,哪怕是最简单的工具时,也应该遵循书中所提出的标准。
10.推荐几本书(.net) – 旷野 – 笑着“留”泪
书名:设计模式:可复用面向对象软件的基础
作者:Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
译者:李英军,马晓星,蔡敏,刘建中
出版日期:2004 年9月
出版社: 机械工业出版社
推荐理由:之所以最后推荐本书,并不是因为它不如前几本,相反,它应该是所有设计爱好者的第一本书。但它太晦涩了,它就像是一本武林秘籍,不是所有人都能参透其中的奥秘。然而幸好很多高手练成绝世武功后,把他们的心得写了出来,这些心得要好理解得多。因此《Head First设计模式》、《设计模式解析》、《Java与模式》等应该称为设计模式初学者的首选。
JAVA零基础者应该看什么书比较好
给大家推荐一些对Java学习有用的经典书籍,感兴趣的小伙伴们可以收藏一下!
1、《thinkingin Java》
被称之为Java的圣经的一本书,不建议零基础刚入门的时候看,容易造成学习阴影压力,建议有一定能力以后观看,能学会很多东西,无论什么阶段都能看,都能有不少收获。
2、《Head First ServleJSP》
这本书确实非常出色,觉得在HeadFirst系列中也算是出色的一本。虽说它是为考试而写的,但是却非常适合初学者,能使人知其然并知其所以然。虽然很厚,但是很快能读完。如果是Servlet和JSP的初学者,推荐用这本。
3、《疯狂Java讲义》
考虑到初学者大多数英文并没有好到可以直接阅读并理解英文书籍,这本书可以说是JAVA教学书中比较好的。
4、《Java从入门到精通》
作为一本Java技术的入门书,它是绝对出色的。语言通俗易懂,一个星期就能让你明白怎么用Java语言写程序。此书对于没有任何编程语言基础的同学非常友好,一步一步带领入门。不过过了基础期之后,它就可以搁置一旁了。
5、《Java核心技术:卷1 基础知识》
这系列书籍,非常适合有一定编程基础的人看,里面基本全是技术讲解,能帮助有编程基础的人迅速掌握Java技术!但是对初学者不怎么友好,因为讲得很深入,而且感觉全书都是重点,找不到真正重要的东西!
6、《Java学习笔记》
此书的特点在于里面有很多作者对Java语言的独有的理解与讲解,这些内容往往也是所有Java语言初学者迷惑的地方。称之为超简明入门书籍也不为过。
7、《HeadFirstJava》
如果你是个讨厌读书的人,那么这本书一定会让你觉得很有趣。
这内容是否看着就很好理解。
这本书,通俗易懂,重点突出的书,相当适合初学者快速入门,缺点是段子太多,有时候会被当成笑话书来看。
以上就是推荐的7本Java经典书籍,希望对大家的学习有所帮助。也希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步。
自学 Java,有哪些书籍推荐?
《疯狂java讲义》 这本书深入介绍了java编程的相关方面,这本书的内容有Java基本语法结构、面向对象特征、集合框架体系、 泛型、异常处理、GUI编程、JDBC数据库编程等等等。非常齐全,我有全套Java视频资料
《Head First Java》 这本书呢被亚马逊评为十大好书之一。《Head First Java》是本完整的面向对象程序设计和Java的学习指导。是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。
《深入理解Java虚拟机:JVM高级特性与最佳实践》 这本书的主要内容是如何独立地编译一个OpenJDK7,讲解了JVM的自动内存管理,分析了虚拟机的执行子系统,讲解了程序的编译与代码的优化,探讨了Java实现高效并发的原理。
《企业应用架构模式》 这本书适合做框架的人去看,如果你打算自己写一个ORM的话,这本书是一定要看的。
《Agile Java》中文版 《Agile Java》中文版以JDK5.0的语法为基础讲解,如果同学们要学习JDK5.0的新语法也不错。可以让你以最少的时间掌握 Java最重要的知识,同时培养出优秀的编程思路,我有全套Java视频资料
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/258298.html