java 订阅
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1]  。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2]  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 [3]  。 展开全文
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1]  。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2]  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 [3]  。
信息
外文名
Java
推出时间
1995年5月
现公司
Oracle
Java发展历程
20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。 [4]  1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。 [5-6]  1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9月,Java Developer Connection社区成员超过10万。1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机 [7]  。2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发 布,几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日,J2EE1.3发布。2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。2005年6月,在Java One大会上,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。 [8]  2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。Sun公司正式发布的有关Java平台标准版的第一批源代码,以及Java迷你版的可执行源代码。从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改 [9]  。2009年,甲骨文公司宣布收购Sun [10]  。2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。2014年,甲骨文公司发布了Java8正式版 [11]  。
收起全文
精华内容
参与话题
问答
  • Java学习的正确打开方式

    万次阅读 多人点赞 2019-10-20 18:34:06
    在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是...

    在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。

    何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。

    一、Java基础

    1、Java基础教学视频

    Java零基础教程视频(适合Java 0基础,Java初学入门)【推荐】

    JavaSE进阶入门项目实战视频教程_动力节点【推荐】

    毕向东Java基础视频教程25天【相对老旧,但也是金典啊!】

    说句实在的,博主当年大一下学期就是看的毕老师Java基础25天的视频,可谓金典啊!现在看来算是比较老旧了,可谓画质感人,若不是老毕的风趣,博主有种怎会坚持看完说句实在的,主要是当时没有学习资源才莫得办法,相比之下其余二者都是比较新颖的视频教程了,都是近一两年的没有质量博主也不会推荐鸭,对吧这个时候就会有童鞋要说了,怎么都是bilibili上的鸭?博主认为B站可谓是最大的学习网站了最重要的是免费免费免费!!!是的!加油学吧!上天是公平的,只要不辜负时间,时间自然不会辜负你。

    2、Java基础博客文章目录

    这些是博主近半个月重新总结的一些javase基础方面的博客,当然,学习总结!学习后才有的总结!建议哪里不懂点哪里进行参考

    解惑真小白的苦恼 | 类的对象,对象引用,对象实例,引用变量

    深入理解static关键字

    深入理解抽象类与接口

    【java基础之继承】java继承从“我爸是李刚”讲起

    【java基础之多态】理解多态的向上向下转型从“妈妈我想吃烤山药”讲起

    【java基础之代码块】Static静态代码块以及各代码块之间的执行顺序

    【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!

    【java基础之匿名内部类】程序员你真的理解匿名内部类吗?

    【java基础之tostring】为什么重写toString()方法?

    【java基础之泛型】泛型

    【java基础之反射】程序员你真的理解反射机制吗?

    java中的transient关键字详解

    史上最骚最全最详细的IO流教程,没有之一!

    【java基础之测试】序员你确定这十个题你都会吗?

    java抽象类(abstract)与接口(Interface)

    java面试官:兄弟简单谈谈Static、final、Static final各种用法吧

    java中的重载与重写

    Java静态static详解

    Java中equals与“==”的区别详解

    java基础之 “==”和“ equals”以及instanceof的区别

    Object类、Date类、System类、StringBuilder类、包装类

    什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?

    java数组定义、使用、以及数组内存分析详解

    Collection集合以及Iterator迭代器实现原理

    List、Set集合系列之剖析HashSet存储原理(HashMap底层)

    Collection和Collections之间的使用与区别(顺带讲解Comparable与Comparator区别)

    Java中的多线程你只要看这一篇就够了

    当然,于此同时学习的过程光是看这些博客文章是不够的不太系统,不太完整,自黑++i,为了各位能够系统性学习,下面我贴出一份300页的Java基础教程笔记,可适当掺杂阅读。啥?300页?我靠,博主牛皮,博主赖斯,博主我要嫁给你!!!哎哎哎…博主我不禁娶不禁娶害羞 当然博主没有这个耐心整理写作300页笔记,还得感谢我的老师吧这是博主的老师整理的 唉哎哎…别打…别打…别打脸…我靠,咋还有扔臭鸡蛋的
    300页的Java基础教程链接:https://pan.baidu.com/s/1awgcwhF_SwMetLYcw-7gpg&shfl=sharepset
    提取码:xfn3

    非常遗憾,上面的300页链接挂了,而且我自己也找不到了,我估计各位开始想打人了…

    以为就完了吗?就能入门了吗???

    就举个例子从这些List, ArrayList, Set ,HashSet, Map ,HashSet 等等java基础的集合框架你都真的掌握了咩?啥?都学过了?那你能够写一个最简单的ArrayList代码实现吗?就从自己创建一个类开始,然后加方法去实现…对于Java集合框架, 不但要学会用, 还会尝试着去实现一遍!!!一定要多折腾,你才会创造出自己的东西,以后你才能出众

    3、Java基础书籍

    放心,博主深怕各位同学学的不够深不够好,所以博主准备了一打书籍给你。包括java编程思想、java核心技术卷一、二,慢慢啃吧…

    链接:https://pan.baidu.com/s/1oeQxwcN6x1r1lUVml0PeLQ&shfl=sharepset 提取码:st3f 【已挂…】

    链接:https://pan.baidu.com/s/19Afs4hbMqZkgxZts9vjyzA&shfl=sharepset 提取码:8ep6

    二、关于JavaWeb基础

    来到Java EE了,博主不得不比比几句了, Java 不就是写服务器端的Web应用的吗?那就自己写个Web程序喽, 可以考虑做一个Web版项目, 用最基础的技术Servlet/jsp/jdbc 。然后自己写个简单mvc框架, 在自己的Web 程序中用起来, 这叫吃自己的狗粮,之后再研究框架 , 自己写个简单的OR mapping框架, 再吃一次自己的狗粮。最后读一下经典的书籍《J2EE development without EJB》 , 是spring 的作者Rod Johnson写的, 它颠覆了大家对于重量级EJB的认识, 开启了新的时代。有了这本书的铺垫, 自己写个简化的依赖注入也不是难事, 写好后还是在自己的Web程序中用起来, 最后一次吃自己的狗粮

    唉唉唉…放开我…博主还能再哔哔几句…

    JavaWeb基础不牢固,学框架只会事倍功半!所以学servlet之前请远离框架…

    1、JavaWeb基础教程视频

    JavaWeb视频教程(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)

    黑马JavaWeb入门到精通(idea版)

    尚硅谷Java视频_JavaWEB基础视频教程

    同样的那句话:上天是公平的,只要不辜负时间,时间自然不会辜负你。

    2、关于JavaWeb博客文章

    我整理的比较少,比较乱,时间比较有限,写的不好,将就这看吧,选择性观看

    JavaWeb专栏

    三、关于数据库

    肯定要学一个啊,最起码MySQL或者Oracle要会,总不能SQL语句也敲不出吧…

    1、关系型数据库教学视频

    MySQL 基础+高级篇- 数据库 -sql -尚硅谷

    SQL数据库

    一天学会 MySQL 数据库

    Oracle从入门到精通教程(全套)_数据库实战精讲_动力节点

    2、非关系性数据库Redis视频

    非关系性数据库Redis了解一下?这个Redis非常重要,博主不多哔哔,怕各位嫌我比比叨叨然后跑到现实中来扎我QnQ,一句话,埋头学吧…

    千锋微服务2019最新Redis教程[千锋南京]

    2019最新Redis实战教程全套学习视频

    入门看视频就好了,但是系统学还得靠官方文档和书籍!!!

    四、关于JDK新特性

    虽然现在jdk12、13的世道了,可现实却是jdk8还是新特性哈哈哈哈…哈哈…哈(原谅我差点笑嗝屁)

    但是必须要明白一点的是用的比较多的还是JDK8!因此JDK8最好要去了解~

    黑马IDEA版本2018Java教学视频—JDK8新特性

    Java 8/9/11 新特性视频教程全集(65P)| 15 小时从入门到精通

    五、关于并发编程

    并发编程其实接触的并不多,但是尤为重要,首当其冲的体现在面试上!现在由于学习软件的人越来越多,特别是Java语言这个行业,而且每年大学生都在毕业,不是我说的浮夸,就连土木工程的大学生都可能转IT这一行,IT行业工资高现在已经是妇孺皆知了,稍微毕业后加入某某培训机构半年,总之学IT的人只会越来越多,随便在大街上拉一个头发茂盛的大叔都可能就是搞软件的,现在有一股妖风,不管啥公司都慢慢像阿里这样的大公司靠近,面试不问点jvm、并发、分布式都不好意思,面试通过之后你的岗位可能仅仅是CURD,老是觉得问问这些显得逼格高点,不管处于什么原因很多公司的确都是这样的!

    这篇文章就是要让你入门java多线程【多线程入门】

    Java并发编程原理与实战

    六、关于NIO

    如果有时间有精力有耐心NIO也是不可或缺的一门知识!急着就业的朋友可以先学框架只后再尽量回头学,当然也只是建议!

    尚硅谷Java视频_NIO 视频教程

    七、关于ssm框架

    ssh建议就不要学了,呸,不能这么说,就是能不学就不学吧,用到再学吧!【只是建议】,总之多学一点也没坏事,看个人吧!反正博主是直接学ssm框架。。。

    1、spring框架视频

    传智spring框架

    Java进阶教程2018年spring框架深入浅出

    2、Mybatis 框架视频

    Mybatis 【黑马】 idea版本

    MyBatis视频教程

    3、SpringMVC框架视频

    【极客学院】一天学会SpringMVC框架

    4、SSM框架博客文章

    4.1、spring框架

    Spring框架学习总结(上)

    Spring框架AOP学习总结(下)

    谈谈Spring核心IOC和AOP

    Spring加载properties文件的两种方式

    4.2、Mybatis框架

    什么是Mybatis,为什么要学习Mybatis,mybatis与hibernate区别

    零基础Mybatis入门程序编写、测试

    MyBatis中SqlMapConfig.xml文件中重点配置:properties属性、typeAliases别名、mappers映射

    MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    Mybatis中#{}与${}的区别

    Mybatis分页插件PageHelper的学习与使用

    Mybatis整合spring详细教程(带思路)

    4.3、SpringMVC框架

    走进SpringMVC世界,从SpringMVC入门到SpringMVC架构

    手把手教你优雅的编写第一个SpringMVC程序

    SpringMVC参数绑定学习总结【前后端数据参数传递】

    【解决】SpringMVC前端到后端400错误

    SpringMVC常见面试题总结(超详细回答)

    4.5、SSM框架整合文章

    当然以上框架文章并不太全,凑合着看吧,尽量以后更新…当然了以上框架企业都不会单个单个的用而是三个框架整合在一起使用,下面这篇文章可就要我的dog命了,加上测试花了整整N个多小时写出来的…

    IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    八、关于数据结构与算法

    可能你不去了解这玩意,你可能永远用不上这玩意,当你用的上瘾了,在以后的开发中,你会被它的魅力所折服的!强烈建议学习!!!,博主也是自掏腰包在极客专栏上买的这个专栏PDF,顺道小结写出博客,也算是一种小成绩吧!

    1、数据结构与算法视频

    (严蔚敏)数据结构视频教程(C语言版48集)

    上古程序员严蔚敏老师了解一下?咳咳当然也有java版的了,如下

    数据结构与算法基础-java版

    尚硅谷图解Java数据结构和算法

    2、数据结构与算法博客文章

    数据结构与算法分析有多重要?

    完全透析数据结构与算法

    时间空间复杂度分析:如何分析、统计算法的执行效率和资源消耗

    如何教会女友递归算法?

    【数据结构01】浅谈数组

    【数据结构02】栈与队列

    【数据结构03】浅谈链表

    【算法04】树与二叉树(递归思想遍历)

    算法动图+原理代码轻松透析八大经典算法

    当然,依旧还在学习中…尽量抽空持续更新

    3、数据结构与算法书籍

    还有附带一本数据结构与算法书籍,够你折腾了…

    链接:https://pan.baidu.com/s/1c1BW4iHdYPCd1nbRW1kUSQ&shfl=sharepset 提取码:jcdw

    九、关于开发工具idea

    java开发工具必须要最好的鸭,强烈建议直接上手idea,如果你非要用eclipse,咋也不敢问啊…

    博主也有个idea专栏,只是写的不多而已,选择性观看吧,建议看视频,讲的绝对比博主我说的好…

    IDEA专栏

    尚硅谷Java视频教程_IDEA视频教程

    十、关于项目管理工具Maven、Git、SVN、Gradle…

    确实,这些肯定要学,不然就out了…

    Maven基础篇(IDEA版)

    尚硅谷Java视频教程_Maven视频

    【教程】学会Git玩转Github【全】

    尚硅谷_Git&GitHub视频

    黑马程序员SVN视频教程

    黑马程序员精品教程|Java进阶教程之Gradle入门到精通

    十一、关于计算机网络原理

    世界上最遥远的就是网络…呀这里断网了,请各位往下接着看暂时还没写这方面的博客,不过还是挺重要的一门

    韩老师讲高校《计算机网络原理》

    韩老师就不多说了,绝对金典…

    十二、关于设计模式

    这个太重要了,不过没有实际开发经验是学不好这一门课程的,所以它分几个阶段学习,并不可能一蹴而就的,如果你听说XXX花了几个月的时间,耗死XXX个脑细胞,专研设计模式这一门,最后他成仙了,看啥都能运用设计模式来解决…你就扯犊子吧…

    1、设计模式博客文章

    Java 大黑话讲解设计模式 – UML类图

    【设计模式】单例模式的八种写法分析

    待续…

    尽量抽空写…

    2、设计模式视频

    尚硅谷图解Java设计模式韩顺平老师2019力作

    23个设计模式

    十三、关于中间件Shiro、Lucene、Solr…

    1、啥是中间件?

    啥是中间件?这个问题对博主而言就跟啥是佩奇这问题是同一层次的,小猪…红色的… 咳咳,扯远了

    其实吧,对于中间件这个概念并没有特定的概念,大致的概念为非业务的技术类组件,是操作系统之上和业务逻辑之下的中间层也都可以称之为中间件,或者说是主要用于解耦底层逻辑和业务应用的组件,或者是一些可复用的后台组件。这些概念倒是麻溜溜滴…似乎有点道理但又没完全讲清楚这个概念,你说气人不气人?

    言而总之,总而言之,中间件其实也有两个层面不同理解:
    1、狭义上讲中间件如常见的远程服务框架、消息队列、缓存等;
    2、广义上讲中间件是操作系统之上业务逻辑之下的所有可复用的后台组件。

    2、Shiro

    尚硅谷Shiro视频教程

    Lucene&solr(2天学习)

    3、Lucene

    2018年黑马程序员就业班57期之【Lucene】

    4、Shiro

    SpringBoot与Shiro整合-权限管理实战视频

    5、Elasticsearch7.X

    2019年全新录制Elasticsearch7.X搜索引擎项目实战Java架构全套视频教程

    6、Dubbo

    尚硅谷Java视频教程_Dubbo

    (千锋教育)Java 微服务架构 Dubbo 篇 一款高性能 Java RPC 框架

    十四、关于JVM虚拟机

    1、JVM博客文章

    深入理解java虚拟机系列初篇(一):为什么要学习JVM?

    别翻了,这篇文章绝对让你深刻理解java类的加载机制【JVM篇二】

    持续写作中…

    2、JVM视频

    面试JVM,听这堂课就够了

    深入理解JVM

    3、JVM书籍

    博主不想bb啥并朝你丢了一本深入java虚拟机

    链接:https://pan.baidu.com/s/1C3bQOIdxdjHOwq6MT283yQ&shfl=sharepset
    提取码:zkww

    先别急着点上面的链接,链接已挂,啥?你已经点了???

    十五、关于消息中间件、RabbitMQ、RocketMQ、ActiveMQ

    单独讲下消息中间件,主要是中间件塔喵的太多惹…

    1、Kafka

    尚硅谷大数据课程之Kafka(2019新版)

    2、RabbitMQ

    MQ消息中间件RabbitMQ 入门到进阶+(牧码人/老王/)+(架构师系列)

    Java架构师带你90分钟快速搞定RabbitMQ消息中间件

    3、RocketMQ

    RocketMQ系统精讲,经受历年双十一狂欢节考验的分布式消息中间件

    2019年最新版Springboot+mybatis+RocketMQ+SpringCloud技术讲解

    4、ActiveMQ

    尚硅谷消息中间件之ActiveMQ

    2019尚硅谷谷粒商城微服务SpringBoot,Dubbo,MySql高级,Redis秒杀,ElasticSearch,ActiveMQ…

    十六、关于容器化技术docker、kubernetes

    尚硅谷_Docker核心技术(基础篇)

    【公开课】Docker入坑教程【33集】

    马哥运维进阶教程:Kubernetes(K8s)从入门到精通

    尚硅谷Kubernetes(k8s基于最新2019年8月发布的1.15.1)

    十七、关于微服务框架

    随着基于Spring之上的框架SpringBoot、Cloud的流行,基于注解式开发的热潮逐渐覆盖了基于XML纯配置的开发,Spring注解将显得格外重要…所以…所以…所以个锤子啊不关咋们什么事啊。。。开个玩笑哈哈,至于微服务框架的学习看个人吧,最好是在找工作前学习一下,现在IT门槛越来越高了,不会点分布式缓存真的不好找工作。

    1、SpringBoot视频

    SpringBoot视频教程(idea版)_2018_spring boot_springboot核心篇+springboot整合篇

    尚硅谷好评如潮【SpringBoot】视频

    2、SpringCloud视频

    尚硅谷_SpringCloud(全)

    千锋:2019Java微服务架构(SpringBoot+SpringCloud)

    答应博主,一定要坚持学完啊!!!

    十八、关于面试

    2019最新Java面试题集精讲全集(互联网大厂必问)

    Java面试题全集84集系列

    京东小米面经

    十九、关于另一层次的学习

    1、参阅官方文档

    另一级别的学习最好的方式就是参阅官方文档,亲生父母往往对孩子是最了解,Spring Boot Reference Guide就是对springboot最了解,怎么样使用springbootspringboot特性等等,springboot在你面前一览无遗;啥?英语不好???google百度翻译插件你值得拥有,咬咬牙也是能看的。如果有时间可以重新学英语,记住,世上无难事,只怕有心人,学什么都不会太晚。

    2、国内技术书籍

    官方文档其次就是书籍,国内的好书自成体系,帮助我们掌握的知识点不至于太散。

    3、参阅博客文章、闲逛github

    再次就是博客文章,不得不吐槽几句,网上的很大一部分文章都是非常浅显,再加上一些标题党的横行,简直不忍直视。这也是很多人抵制博客文章的原因,这里不得不提一下:每次百度或者谷歌一下知识点或者bug,我敢打包票出现最多的推荐靠前的都是CSDN,我相信很多人会认为CSDN很强大,实际上你错了,过段时间你就会慢慢抵制CSDN,看到简书或者博客园、知乎的文章你会优先去看。至于原因就是因为CSDN是国内最大的博客平台,同时一些“标题党.equal 烂人”随之衍生,为了所谓的点击量,博取眼球,自以为自己访问量高很nice?这里也不是说起博取眼球的标题是抵制,前提是你的这篇文章要有一定深度和见解,能够撑起整片文章知识点的架构,博取眼球的标题才是真正有意义的,当之无愧。

    总归来说,园子内还是有很多技术大牛,写的博客自然也是非常棒,非常具有学习价值。每次看都是一种享受,一种熏陶。当然还有github、社区、论坛、码云等等。这就是源码的朋友圈,我们从中也能获取到非常多关于源码的信息。但是针对某个知识点却特别的细,对彻底掌握非常有帮助。

    至于博主为啥要抽空整理出这样一篇博客文章,原因很简单…

    博主大一下学期的时候无尽的迷茫惆怅,博主何尝不期望有位“高人”指路,想学却又不知从何下手,那种无助那种孤独的滋味我懂…
    所以博主只希望生活能够不辜负每个少年的一腔热血,写作本文章的意义仅此而已…

    瓜皮群众皮皮甲: 呜呜呜…博主大一下学期原来这么孤独啊,看了这么久的文章还一直以为这位博主是个有趣、对生活充满阳光的,没想到这个博主“徒有其表”啊 QnQ

    瓜皮群众皮皮乙: 是啊是啊…

    博主: 咳咳…那啥…今天就先到这里了,博主有事,唉唉唉…看…又是那个该死的包工头来电话了,话说今天的砖头格外烫手。

    瓜皮群众皮皮丙: 博主怎么画风怎么又变了, 唉唉唉…博主别走鸭…上我家搬砖去啊,午饭外加一个鸡腿…

    如果有想要和博主一起交流的朋友,欢迎各位及时联系博主…那… 咋们有bing再见~

    持续更新…

    如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

    最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

    欢迎各位关注我的公众号,一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔…

    在这里插入图片描述

    展开全文
  • Java学习路线(完整详细版)超详细

    万次阅读 多人点赞 2019-05-14 10:56:47
    一门永不过时的编程语言——Java 软件开发。 Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员...

    一门永不过时的编程语言——Java 软件开发。

    Java编程语言占比:

    据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员的数量最多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位!

    Java工程师就业:

    1.通过各大招聘网站统计,全国海量公司都在招聘Java开发工程师

    2.北京Java开发工程师平均薪资,即16788元

    3.全国Java开发薪资前三:北京 上海 广州

    javacto.taobao点com

    工具/原料

    • Java学习路线

    • Java学习大纲

    Java基础课程

    1. 1

      Java基础课程内容涉及:Java开发介绍、Java数组、Java面向对象、常用基础类、集合、IO流、多线程、异常、反射。

    2. 2

      第一部分:Java开发介绍

      1. DOS常用命令

      2. JVM、JRE、JDK之间的关系

      3. Java开发环境的搭建:安装JDK,配置环境变量

      4. Java入门程序(Java的开发流程)

      5. Java的注释,标识符、标识符的命名规范

      6. Java基本数据类型

      7. 变量和常量的定义及初始化

      8. Java的运算符

      9. 运算符的优先级

      10. Java分支语句之if...else

      11. 循环的嵌套

      12. 方法的定义

      13. 方法的形参和实参

      14. 方法的递归调用

    3. 3

       

      第二部分:Java数组

      1. Java 数组的定义

      2. Java 数组的声明

      3. 数组的优势与局限

      4. 数组的遍历访问(普通循环,增强for循环)

      5. 数组元素的顺序查找

      6. 数组元素的冒泡法排序

      7. Arrays工具类的使用

      8. 二维数组

    4. 4

       

      第三部分:Java面向对象

      1. 面向对象设计思想

      2. 面向对象的分析与设计

      3. Java与面向对象

      4. 类中成员变量的定义与意义

      5. 构造方法的定义和调用

      6. 面向对象的封装特性

      7. 局部变量和成员变量的作用域问题

      8. 静态属性、静态方法、静态代码块

      9. 面向对象的继承特性

      10. 继承中构造方法的细节

      11. 面向对象的多态特性

      12. 抽象方法与抽象类

      13. 接口

       

    5. 5

      第四部分:异常

      1. 异常的概念

      2. 异常的分类

      3. 异常的理解

      4. 常见异常介绍

      5. 运行时异常

      6. 编译时异常

      7. 运行和编译异常区别

      8. 异常的处理方式之捕获异常

      9. 异常的处理方式之抛出异常

      10. 异常的处理方式之断点调试

      11. 断点调试之引导运行步骤

      12. 自定义异常

      13. 异常关键字处理

      14. 关键字执行流程

      15. 异常总结

    6. 6

       

      第五部分:集合

      1. 集合的概念和作用

      2. 集合和数组的区别

      3. 集合框架体系介绍

      4. 集合框架之Collection接口

      6. ArrayList和LinkedList的方法使用

      7. ArrayList和LinkedList各自的工作原理分析原理分析

      8. 使用多种方式遍历集合

      9. HashSet和LinkedHashSet各自的工作原理分析

      10. 集合框架之Map接口

      11. 泛型的使用

      12. Collections工具类的使用

       

    7. 7

      第六部分:IO流

      1. File类的作用

      2. File类中常用方法的使用介绍

      3. 使用File类操作文件和文件夹

      4. 相对路径和绝对路径的介绍

      5. IO流的概念和工作原理

      6. IO流的分类

      7. 文件流的使用

      8. 转换流的使用

      9. 缓冲流的使用

      10. 对象流的使用

      11. 内存流的使用

      12. 使用不同的流实现文件内容的拷贝

    8. 8

      第七部分:多线程

      1. 进程和线程的介绍

      2. 进程和线程之间的区别与联系

      3. 线程实现方式之继承自Thread类

      4. 线程实现方式之实现Runnable接口

      5. 线程实现方式之线程池

      6. 线程的生命周期

      7. 线程中常用方法的使用

      END

    第二阶段:JavaWeb

    1. 1

      JavaWeb课程内容涉及:HTML5课程、CSS3、JavaScript、MySQL使用、JDBC连接池、Servlet、JSP、AJAX、jQuery、Bootstrap。

    2. 2

      第一部分:HTML5

      1. html概述

      2. html基本标签

      3. 图片标签

      4. 超链接标签

      5. 表格标签

      6. 无序列表标签

      7. 有序列表标签

      8. 定义列表标签

      9. div标签

      10. 语义化标签

      11. 表单标签

    3. 3

       

      第二部分:CSS3

      1. CSS3简介和用途

      2. CSS3书写规范

      3. CSS3基本语法

      4. CSS3三种使用方式

      5. 标签选择器

      6. Id选择器

      7. Class选择器

      8. 属性选择器

      9. 层次选择器

      10. 文字、文本属性

      11. 背景、列表属性

      12. 尺寸、显示、轮廓属性

      13. 浮动、定位属性

      14. 盒子模型

      15. CSS3高级属性

       

    4. 4

       

      第三部分:JavaScript

      1. JavaScript概述

      2. JavaScript发展史

      3. JavaScript组成

      4. 数据类型

      5. 运算符

      6. 分支语句

      7. 循环语句

      8. 系统函数、自定义函数、匿名函数

      9. 常见事件

      10. 数组、字符串、日期对象

      11. 正则表达式

      12. BOM对象:window、history、location

      13. DOM概念

      14. DOM操作:创建、修改内容、删除

      15. Css样式操作

       

    5. 5

      第四部分:MySQL使用  或oracle数据库

      1. 数据库简介

      2. MySQL的安装与使用

      3. MySQL客户端和服务器配置

      4. 用户权限管理

      5. DDL创建数据库和表

      6. 约束与外键

      7. DML实现添加、修改、删除数据

      8. 聚合函数、日期函数等

      9. DQL简单查询

      10. 排序、分组、筛选

      11. 多表查询

      12. 子查询

      13. in和exists关键字

      14. 分页查询

      15. Mysql SQL语句优化介绍

    6. 6

      第五部分:JDBC连接池

      1. JDBC概述

      2. JDBC使用步骤

      3. Connection、Statement、ResultSet接口

      4. 使用JDBC 完成数据库DML操作

      5. PreparedStatement对象

      6. 大数据的操作

      7. 批量处理与元数据

      8. 事务处理

      9. 隔离级别

      10. 自定义连接池

      11. DBCP、C3p0连接池

      12. DBUtis工具类

      13. QueryRunner

      14. 自定义结果集处理

      15. 连接池知识总结

    7. 7

      第六部分:Servlet

      1. Tomcat与Eclipse的集成开发

      2. 什么是Servlet

      3. Servlet的进化史

      4. Servlet的优化过程

      5. Servlet中应用的多线程概念

      6. Servlet接收客户端请求信息

      7. Servlet响应客户端信息

      8. Servlet的生命周期

      9. 重定向写法

      10. 转发写法

      11. 转发和重定向区别

      12. HttpServletRequest获取中文乱码问题

      13. HttpServletResponse响应中文乱码问题

      14. Servlet路径映射问题

      15. Servlet多路径映射

    8. 8

      第七部分:JSP

      1. 什么是JSP

      2. JSP的内置对象

      3. 透析JSP的本质

      4. JSTL+EL

      5. MVC介绍

      6. 分层的重要性

      7. Web工程中事务实现

      8. Session的使用

      9. Cookie的使用

      10. web工程中连接池的使用

      11. 实现用户的自动登录

      12. 文件的上传、下载

      13. 过滤器、 监听器

      14. 反射、注解、泛型

      15. 综合案例练习

    9. 9

      第八部分:AJAX

      1. Ajax技术背景

      2. Ajax技术的理解

      3. XMLHttpRequest使用步骤

      4. XMLHttpRequest GET/POST的区别

      5. 同步请求&异步请求

      6. 同步请求&异步请求的区别

      7. Ajax获取不同的返回值类型

      8. Ajax使用原生JavaScript和Jquery的区别

      9. Ajax响应状态处理

      10. JSON语法

      11. Java JSON 解析

      12. Java JSON 生成

      13. Java JSON 第三方工具快速解析

      14. JavaScript JSON转换

      15. Jquery JSON转换

      END

    Java框架课程

    1. 1

      Java框架课程内容涉及:Spring、Spring MVC、MyBatis、SVN、Git、Maven、SpringBoot

    2. 2

      第一部分:Spring

      1. 框架原理介绍

      2. 框架环境搭建

      3. 快速入门

      4. 创建Bean的方式及实现原理

      5. Bean种类

      6. Bean生命周期

      7. Bean的作用域

      8. Bean的注值方式

      9. 整合Junit测试

      10. 注解装配Bean

      11. 注解装配Bean

      12. AOP思想、原理解剖

      13. AOP底层JDK动态代理

      14.AOP编程

      15. AspectJ介绍及实现AOP开发

      16.事务

      17. Web项目集成Spring

    3. 3

      第二部分:Spring MVC

      1. Spring MVC 概述

      2. 使用 @RequestMapping映射请求

      3. 请求处理方法签名概述

      4. 处理方法签名详细说明

      5. 使用 HttpMessageConverter

      6. 处理模型数据

      7. 数据绑定流程剖析

      8. 数据格式化

      9. 数据校验

      10. 视图和视图解析器

      11. 处理方法的数据绑定

      12. 视图和视图解析器

      13. 文件上传下载

      14. JSON处理

      15. 拦截器

    4.  

      第三部分:MyBatis

      1. MyBatis数据框架介绍

      2. MyBatis对比Hibernate框架

      3. MyBatis配置、查询数据

      4. MyBatis全局配置文件

      5. MyBatis全局配置文件元素详细介绍

      6. Mapper映射文件

      7. MyBatis两种开发方式

      8. MyBatis中别名配置

      9. MyBatis # 和 $ 拼接参数区别

      10. 关联查询,动态sql

      11. MyBatis缓存机制、整合ehcache

      12. MyBatis二级缓存处理

      13. MyBatis、Spring、SpringMVC整合

      14. 分页插件

      15. MyBatis逆向工程

       

    5. 第四部分:SVN   和git

      1. SVN简介

      2. SVN和Git对比

      3. SVN服务器搭建

      4. SVN创建仓库

      5. SVN创建用户以及分配权限

      6. SVN签出、提交、更新

      7. Eclipse整合svn插件

      8. Idea整合svn插件

      9. 使用SVN更新提交

      10. SVN仓库分析

      11. SVN协同修改&冲突解决

      12. SVN代码整合注意事项

      13. SVN权限管理

      14. SVN数据回滚

      15. TortoiseSVN

    6. 6

      第五部分:Maven

      1. Maven环境搭建

      2. Maven构建项目

      3. Maven本地仓库配置

      4. Maven中央仓库配置

      5. Maven基本概念

      6. Maven基本命令介绍

      7. Maven于Eclipse整合

      8. Maven于Idea整合

      9. Maven创建web工程

      10. pom.xml、依赖管理

      11. 坐标、依赖、生命周期等

      12. Eclipse下的Maven使用

      13. Maven中 继承、聚合

      14. Maven构建SSH/SSM应用

      15. 自动部署、持续集成、持续部署

    7. 第六部分

      项目开发

    Java企业级课程  javacto点taobao点com

     

    展开全文
  • Java学习指南(Java入门与进阶)

    万人学习 2017-08-09 15:30:12
    这是Java学习指南系列课程的第1篇,介绍Java语言的入门语法,引领希望学习Java语言编程的初学者进入Java大门。 本课程不需要其他语言作为基础,可以直接学习。 课程从Java开发平台的下载和安装开始,从...
  • Java8编程实战

    万人学习 2016-12-31 18:03:03
    Java一直作为优秀的编程语言活跃于软件开发行业,掌握Java不仅是一件兴奋的事,更是一把可以帮助你轻松进入软件行业大门的一把金钥匙,本套课程将为读者讲解Java8的所有核心技术知识,一共240集的Java8开发课程,...
  • Java之路

    万人学习 2015-05-05 21:52:58
    你了解Java吗?你知道Java能做什么吗?你知道Java该怎么学吗?你知道Java未来的发展趋势、发展状况吗?
  • 推荐10个堪称神器的 Java 学习网站

    万次阅读 多人点赞 2019-10-28 15:11:28
    Java学习网站,有了这些,成为大牛不在话下

    经常有一些读者问我:“二哥,学习 Java 应该关注哪些网站?”,我之前的态度一直是上知乎、上搜索引擎搜一下不就知道了。但读者对我这个态度很不满意,他们说,“我在问你,又不是问知乎,问搜索引擎。”你还别说,读者说得有道理。

    于是我想,那就推荐一些吧。先说我心目中的前三名,但不局限于 Java 学习者。

    1)Google

    啥都不说了,说多了都是泪,可气的是 Robin 李的搜索引擎实在是不争气。说句良心话,Google 的搜索结果比前者的质量高出一百(零一)倍。

    我想,推荐 Google 的人不在少数,但 Google 不能直接访问啊。一年前,我通过种种努力找到了解决办法,问遍了所有群,遭受了无数的嘲讽。

    Google 也算是网站?必须算啊。只要你想要学习,它会给你所有。

    2)Stack Overflow

    Stack Overflow 可以说是解决问题的杀手锏。下面这些问题是不是都很常见?

    如果英语能力不太好的话,可以借助一下 Chrome 浏览器的自动翻译功能。

    3)GitHub

    GitHub 是一个拥有数十亿行代码的网站,每天有数百万开发者聚集在一起,研究开源软件中存在的问题。

    对于普通的程序员来说,如果不想重复造轮子,就必须要站在巨人的肩膀上,那么巨人是谁呢?就是 GitHub。那些牛逼的开源软件库,99% 的情况下会在 GitHub 上找到它。

    对于成功的程序员来说,如果想要被别人膜拜,最好能在 GitHub 上贡献一个开源库,如果星标超过 1W,那可是相当的牛逼,在业界应该算是响当当的人物。

    然后,我再推荐一些 Java 程序员必须要关注的网站。

    4)IBM Developer

    IBM developerWorks 提供了中文版,里面的文章都属于非常高质量的。

    5)Java SE 技术文档

    即使是 Java 编程的大牛 , 也离不开这份文档。中文版的 API 可以参照:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

    6)Java World

    这个网站包含了大量的 Java 教程 , 涉及各种各样的话题。其中很多文章都写的很好 , 并且有图片、插图进行说明。它可以被用来当作深度学习的教科书。英文能力有限的话,可以使用谷歌翻译。

    7)Program Creek

    Program Creek 在维护方面做的很好 , 文章读起来也比较有趣。在这里 , 你可以找到其他任何网站都不曾涉及到的话题 , 而且几乎每篇文章都包含漂亮的插图或者示例代码。

    8)LeetCode

    备战技术面试?力扣提供了海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。

    刷题的话,还有一个牛客网值得推荐,里面各个公司的面试题和面经分享,找工作前认真刷一刷,一定会大有所获。这里强调一下刷题的重要性:

    • 可以让思维保持活跃
    • 强化对基本知识的理解
    • 要想找到工作,就要过面试,不刷题怎么能行

    9)JournalDev

    想学系列文章,我推荐 JournalDev,这个网站上所有的 Java 系列文章都堪称经典。有 Spring,有 Java 设计模式,有 Java 核心,有 Java EE,有 Java 面试题,应有尽有。
    在这里插入图片描述

    10)CSDN

    CSDN 上虽然很多标题党文章,文章质量也参差不齐,但上面仍然有不少大牛的。说句不好听的,学习,只要遇到一篇能够帮助到自己的文章,就算是值了。

    兄dei,如果觉得我写的不错,不妨帮个忙

    1、关注我的原创微信公众号「沉默王二」,每天准时推送干货技术文章,专注于有趣的Java技术和有益的程序人生,听说关注了的不优秀也会变得优秀哦。

    2、给这篇文章点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。

    作者简洁

    作者:你好呀,我是沉默王二,从大专到培训到外包,经历了很多辛酸,所以申请了一个微星公众号『沉默王二』,专业于写这些基础知识,提升我们的内功,二哥期待你的关注,和我一起学习。 转载说明:未获得授权,禁止转载

    展开全文
  • java 万年历

    千次阅读 2009-10-24 21:10:00
    import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionL

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseWheelEvent;
    import java.awt.event.MouseWheelListener;
    import java.util.Calendar;
    import java.util.GregorianCalendar;

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class Main extends JFrame implements ActionListener, MouseWheelListener {

        private static final long serialVersionUID = 7499985850889594686L;
        // 所有的组件都添加到此面板上后添加到jframe 中显示
        JPanel parent = null;

        JTextField yearField = null;
        JTextField monthField = null;

        JPanel datePanel = null;

        JPanel south = new JPanel();
        // 每行七个,其6行
        JLabel[] days = new JLabel[6 * 7];
        Font f = new Font("Arial", Font.BOLD, 14);

        Calendar c = new java.util.GregorianCalendar();
        Week week = new Week(c);
        Clock2 clock = new Clock2(this);
        Lunar lunar = new Lunar(c);

        public Main() {
            jsInit();
        }

        private void jsInit() {
            this.setTitle("简易万年历for LGC");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLayout(new BorderLayout());

            Container c = this.getContentPane();
            parent = new JPanel();
            datePanel = new JPanel();
            datePanel.setBackground(Color.green);
            // parent.setBackground(Color.GREEN);
            c.add(parent);
            for (int i = 0; i < days.length; i++) {
                days[i] = new JLabel();
            }

            // 添加各种组件
            addC();

            // 添加listener
            addLis();

            this.setResizable(false);
            this.setBounds(60, 60, 350, 280);
            this.setVisible(true);

        }

        private void addLis() {
            yearField.addActionListener(this);
            monthField.addActionListener(this);
            parent.addMouseWheelListener(this);

        }

        // 添加组件
        public void addC() {
            // 在其中添加星期信息,并提供一个field 用来输入年月
            addInputField();

            // 添加日期信息
            addDatesPanel();
            // 添加农历信息
            addTail();

        }

        private void addDatesPanel() {
            datePanel.removeAll();
            parent.add(datePanel, BorderLayout.CENTER);

            datePanel.setLayout(new GridLayout(6, 7));

            if (week.y % 4 == 0 && week.y % 100 != 0)
                week.monthday[1] = 29; // 判断是否为闰年
            int index = 0;
            for (week.d = 1; week.d <= week.monthday[week.m - 1]; week.d++) {
                week.w = week.week(week.y, week.m, week.d); // 计算出这个月的开头是星期几
                // 根据已算出的其星期几,来输出每个月的一号前的几个空格以使星期与日期对齐
                if (week.d == 1) {
                    for (week.i = 0; week.i < week.w; week.i++) {
                        setLabelText(index, "  /t   ");
                        index++;

                    }

                }
                // 开始输出这个月的所有日期
                if (week.d <= 31) {/*
                                     * 注:这里的if条件week.d小于的数只要大于等于31就可以,因为到底输出多少天
                                     * 有第二层循环的”d<=week.monthday[week.m-1]“来决定
                                     */
                    if (week.d == c.get(Calendar.DAY_OF_MONTH)) {
                        setLabelText(index,
                                "<html><font color=red> &nbsp;&nbsp;&nbsp;"
                                        + week.d + "</font></html>    ");
                    } else {

                        setLabelText(index, "   " + week.d + "     ");
                    }

                    index++;
                }

            }

            for (; index < 6 * 7; index++) {
                setLabelText(index, "  /t  ");
            }

        }

        private void setLabelText(int index, String text) {

            days[index].setText(text);
            days[index].setName(week.d + "");

            days[index].setFont(f);
            int year = Integer.parseInt(yearField.getText().trim());
            int month = Integer.parseInt(monthField.getText().trim());
            Calendar cc = new GregorianCalendar(year, month - 1, week.d);
            String lunDate = new Lunar(cc).toString();
            days[index].setToolTipText(lunDate);
            datePanel.add(days[index]);

        }

        private void addWeeksLabels(JPanel p) {
            JPanel weeks = new JPanel();
            weeks.setBackground(Color.ORANGE);
            weeks.setLayout(new GridLayout());
            weeks.add(new JLabel("周七       "));
            weeks.add(new JLabel("周一    "));
            weeks.add(new JLabel("周二    "));
            weeks.add(new JLabel("周三    "));
            weeks.add(new JLabel("周四    "));
            weeks.add(new JLabel("周五    "));
            weeks.add(new JLabel("周六   "));

            p.add(weeks, BorderLayout.CENTER);
        }

        public void addInput(JPanel p) {
            JPanel inputPanel = new JPanel();
            inputPanel.setBackground(Color.YELLOW);
            inputPanel.setLayout(new GridLayout(1, 4));

            yearField = new JTextField(week.y + "");
            monthField = new JTextField(week.m + "");
            inputPanel.add(yearField);
            inputPanel.add(monthField);
            p.add(inputPanel, BorderLayout.NORTH);
        }

        private void addInputField() {
            JPanel par = new JPanel();
            parent.add(par);
            par.setLayout(new BorderLayout());

            addInput(par);
            addWeeksLabels(par);

        }

        public static void main(String[] args) {
            new Main();
        }

        private void modifyDatePanel() {
            addDatesPanel();
        }

        private void modifyModel() {

            week.y = Integer.parseInt(yearField.getText().trim());
            week.m = Integer.parseInt(monthField.getText().trim());

            c.set(Calendar.YEAR, week.y);
            c.set(Calendar.MONTH, week.m - 1);

            lunar.setCal(c);
        }

        private void monthAddOne() {
            if (week.m < 12) {
                week.m++;
            } else if (week.m == 12) {
                week.y++;
                week.m = 1;
            }
            c.set(Calendar.YEAR, week.y);
            c.set(Calendar.MONTH, week.m - 1);
            lunar.setCal(c);

        }

        private void monthMinusOne() {
            if (week.m == 1) {
                week.y--;
                week.m = 12;
            } else {
                week.m--;
            }
            c.set(Calendar.YEAR, week.y);
            c.set(Calendar.MONTH, week.m - 1);
            lunar.setCal(c);
        }

        private void addTail() {

            south.setLayout(new BorderLayout());
            parent.remove(south);
            parent.add(south, BorderLayout.SOUTH);

            addClock(south);

        }

        private void addClock(JPanel south) {
            south.remove(clock);
            south.add(clock, BorderLayout.CENTER);
        }

        public void mouseWheelMoved(MouseWheelEvent e) {

            if (e.getWheelRotation() == 1) {
                monthAddOne();
            } else if (e.getWheelRotation() == -1) {
                monthMinusOne();
            }

            yearField.setText(week.y + "");
            monthField.setText(week.m + "");

            modifyDatePanel();
            // addTail();
            // this.repaint();
            parent.repaint();

        }

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == yearField || e.getSource() == monthField) {
                try {
                    modifyModel();
                    System.out.println("===========");
                    modifyDatePanel();

                } catch (NumberFormatException e1) {
                    JOptionPane.showMessageDialog(this, "日期格式不对!!!:"
                            + e1.getMessage());

                }

                parent.repaint();

            }

        }

    }

     

     

     

     

     

     

    //============================================

    /**
     * Clock.java
     * Summary 数字时间显示
     * @author liyuanxun
     *
     */

    /**
     * java.awt.Canvas:Canvas组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
     * java.awt.Font:Font类表示字体,用来以可见方式呈现文本。字体提供将字符序列映射到字形序列所需的信息,以便在Graphics对象和Component对象上呈现字形序列
     * java.awt.Graphics类是所有图形上下文的抽象基类,允许应用程序可以在组件(已经在各种设备上实现),以及闭屏图像上,进行绘制
     * java.text:提供以与自然语言无关的方式来处理文本,日期,数字和消息的类和接口
     * java.text.SimpleDateFormat:是一个以与语言环境相关的方式来格式化和分析日期的额具体类。
     */

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;

    class Clock2 extends Canvas implements Runnable {
        /**
      *
      */

        private static final long serialVersionUID = 3660124045489727166L;

        Thread t;
        String time;
        Main frame;

        public Clock2(Main frame) {
            this.frame = frame;
            setSize(350, 100);
            setBackground(new Color(204, 232, 207));
            t = new Thread(this);
            t.start();
        }

        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    System.out.println("异常");
                }
                this.repaint(100);
            }
        }

        public void paint(Graphics g) {
            Font f = new Font("宋体", Font.BOLD, 13);
            SimpleDateFormat SDF = new SimpleDateFormat(
                    "yyyy'年'MM'月'dd'日'  HH:mm:ss");
            Calendar now = Calendar.getInstance();
            time = SDF.format(now.getTime());
            g.setFont(f);
            g.setColor(Color.blue);
            String lunar = frame.lunar.toString();
            String shengxiao = frame.lunar.animalsYear();
            g.drawString(time, 20, 10);
            g.drawString("农历:", 20, 30);
            g.drawString(lunar, 60, 30);
            g.drawString("生肖:", 20, 50);
            g.drawString(shengxiao, 60, 50);

        }
    }

     

    //========================================================


    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

    class Lunar {
        private int year;
        private int month;
        private int day;
        private boolean leap;
        final static String[] chineseNumber = { "一", "二", "三", "四", "五", "六", "七",
                "八", "九", "十", "十一", "十二" };
        static SimpleDateFormat chineseDateFormat = new SimpleDateFormat(
                "yyyy年MM月dd日");
        final static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570,
                0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
                0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0,
                0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50,
                0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,
                0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0,
                0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4,
                0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550,
                0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950,
                0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260,
                0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0,
                0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
                0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40,
                0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3,
                0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960,
                0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0,
                0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,
                0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0,
                0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65,
                0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0,
                0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2,
                0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };

        // ==========================传回农历y年的总天数
        final private static int yearDays(int y) {
            int i, sum = 348;
            for (i = 0x8000; i > 0x8; i >>= 1) {
                if ((lunarInfo[y - 1900] & i) != 0)
                    sum += 1;
            }
            return (sum + leapDays(y));
        }

        // ====== 传回农历 y年闰月的天数
        final private static int leapDays(int y) {
            if (leapMonth(y) != 0) {
                if ((lunarInfo[y - 1900] & 0x10000) != 0)
                    return 30;
                else
                    return 29;
            } else
                return 0;
        }

        // ====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
        final private static int leapMonth(int y) {
            return (int) (lunarInfo[y - 1900] & 0xf);
        }

        // ====== 传回农历 y年m月的总天数
        final private static int monthDays(int y, int m) {
            if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
                return 29;
            else
                return 30;
        }

        // ====== 传回农历 y年的生肖
        final public String animalsYear() {
            final String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇",
                    "马", "羊", "猴", "鸡", "狗", "猪" };
            return Animals[(year - 4) % 12];
        }

        // ====== 传入 月日的offset 传回干支, 0=甲子
        final private static String cyclicalm(int num) {
            final String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚",
                    "辛", "壬", "癸" };
            final String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午",
                    "未", "申", "酉", "戌", "亥" };
            return (Gan[num % 10] + Zhi[num % 12]);
        }

        // ====== 传入 offset 传回干支, 0=甲子
        final public String cyclical() {
            int num = year - 1900 + 36;
            return (cyclicalm(num));
        }

        /** */
        /**
         * 传出y年m月d日对应的农历. yearCyl3:农历年与1864的相差数 ? monCyl4:从1900年1月31日以来,闰月数
         * dayCyl5:与1900年1月31日相差的天数,再加40 ?
         *
         * @param cal
         * @return
         */
        public Lunar(Calendar cal) {
            setCal(cal);
        }

        public void setCal(Calendar cal) {
            @SuppressWarnings("unused")
            int yearCyl, monCyl, dayCyl;
            int leapMonth = 0;
            Date baseDate = null;
            try {
                baseDate = chineseDateFormat.parse("1900年1月31日");
            } catch (ParseException e) {
                e.printStackTrace(); // To change body of catch statement use
                                        // Options | File Templates.
            }

            // 求出和1900年1月31日相差的天数
            int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);
            dayCyl = offset + 40;
            monCyl = 14;

            // 用offset减去每农历年的天数
            // 计算当天是农历第几天
            // i最终结果是农历的年份
            // offset是当年的第几天
            int iYear, daysOfYear = 0;
            for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) {
                daysOfYear = yearDays(iYear);
                offset -= daysOfYear;
                monCyl += 12;
            }
            if (offset < 0) {
                offset += daysOfYear;
                iYear--;
                monCyl -= 12;
            }
            // 农历年份
            year = iYear;

            yearCyl = iYear - 1864;
            leapMonth = leapMonth(iYear); // 闰哪个月,1-12
            leap = false;

            // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天
            int iMonth, daysOfMonth = 0;
            for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {
                // 闰月
                if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) {
                    --iMonth;
                    leap = true;
                    daysOfMonth = leapDays(year);
                } else
                    daysOfMonth = monthDays(year, iMonth);

                offset -= daysOfMonth;
                // 解除闰月
                if (leap && iMonth == (leapMonth + 1))
                    leap = false;
                if (!leap)
                    monCyl++;
            }
            // offset为0时,并且刚才计算的月份是闰月,要校正
            if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {
                if (leap) {
                    leap = false;
                } else {
                    leap = true;
                    --iMonth;
                    --monCyl;
                }
            }
            // offset小于0时,也要校正
            if (offset < 0) {
                offset += daysOfMonth;
                --iMonth;
                --monCyl;
            }
            month = iMonth;
            day = offset + 1;
        }

        public static String getChinaDayString(int day) {
            String chineseTen[] = { "初", "十", "廿", "卅" };
            int n = day % 10 == 0 ? 9 : day % 10 - 1;
            if (day > 30)
                return "";
            if (day == 10)
                return "初十";
            else
                return chineseTen[day / 10] + chineseNumber[n];
        }

        public String toString() {
            return cyclical() + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + "月"
                    + getChinaDayString(day);
        }

        public static void main(String[] args) throws ParseException {
            Calendar today = Calendar.getInstance();
            today.setTime(chineseDateFormat.parse("2003年1月1日"));
            Lunar lunar = new Lunar(today);

            System.out.println("北京时间:" + chineseDateFormat.format(today.getTime())
                    + " 农历" + lunar);
        }

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    import java.util.Calendar;

    //计算星期的函数

    /*
     * 万年历的公式常用公式: S=X-1+(X-1)/4-(X-1)/100+(X-1)/400+C 说明:X为公元年数;
     * C为从元旦起,到要算的那天总天数(如:2003年2月13日,C=31+13=44)
     * S/7余数为星期几(如余数为0,1,2,3,4,5,6。分别为星期天,星期一,二,三,四,五,六)
     *
     * 基姆拉尔森计算公式: 在公式中d表示日期中的日数,m表示月份数,y表示年数。 注意:在公式中有个与其他公式不同的地方:
     * 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13- 10来代入公式计算。
     */
    // 用于计算某一日期为星期几
    class Week {
        int monthday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        int y, w, i, m = 1, d = 1; // y为年、m为月、d为日期、w为星期几

        public Week() {

        }

        public Week(Calendar c) {
            y=c.get(Calendar.YEAR);
            m=c.get(Calendar.MONDAY)+1;
        //    d=c.get(Calendar.DAY_OF_MONTH);

        }

        int week(int y, int m, int d) {
            int w;
            if ((m == 1) || (m == 2)) {
                y--;
                m += 12;
            }
            w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7; /* 基姆拉尔森计算公式 */
            return (w);
        }
    }

     

     

    展开全文
  • JAVA编程实现万年历

    2010-05-02 13:36:38
    本小程序是用JAVA编程实现万年历,依次输入年月,可以显示查询月份的日历,可以判断是否闰年,本月有多少天,本月第一天是星期几,程序中有详细的注释,帮助初学者很快理清算法,希望对合适的人有帮助!(如果只是...
  • 我该用 Java 12 还是坚持 Java 11?

    万次阅读 多人点赞 2018-11-05 17:08:59
    搭上火箭也追不上的 Java 更新速度,不少程序员们大呼,我可不可以坚持使用 Java 8?!但是对于已使用到 LTS 版本的 Java 11 开发者,是否还有必要往上升...
  • Java面试题全集(上)

    万次阅读 多人点赞 2015-04-08 17:14:00
    2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《Java面试...
  • Java/JDK教程手册 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 一 Download Resouce —— 下载准备的...
  • 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...
  • Java中&、|、&&、||详解

    万次阅读 多人点赞 2017-02-18 22:37:27
    1、Java中&叫做按位与,&&叫做短路与,它们的区别是: & 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&&...
  • Java学习总结

    千次阅读 2007-07-09 11:27:00
    转载自:http://www.dayol.cn/html/world/allcol/2007/0619/6011.html同时感谢该博客众多源代码为我带来的帮助。 <!--google_ad_client = "pub-3006319877375389";google_ad_width = 336;google_ad_height = 28
  • JAVA学习路线图---(JAVA1234)

    千次阅读 2013-10-05 16:31:20
    JAVA学习路线图---(JAVA1234) 分类: WEB开发 JAVA技术 JSP SSH2013-10-04 13:25 517人阅读 评论(9) 收藏 举报 web开发Java 第一阶段-Java基础  这一阶段很重要,关系到你...
  • 我的Java学习之路

    千次阅读 2016-06-15 23:19:02
    这段时间主要在学习Java编程方面的知识,之前自己主要是通过C++来做图像,技多不压身,学习了一个月,再次写一篇博客来总结这段时间的学习过程,作为一个Java的入门级菜鸟选手,这算是一篇水贴,所以我选择放在了...
  • Java学习系列博客全目录

    千次阅读 2015-05-08 23:22:13
    希望对想学习Java语言的朋友能够提供帮助。在编写的过程中,难免会出现一些错误,希望大家能多多提些意见。 由于本书都是从笔者CSDN博客中摘抄过来的,基本没有经过什么正规的校验,所以难免会出现一些不对的...
  • Java学习全过程思维导图

    千次阅读 2018-08-05 20:46:46
    标题  
  • 程序员在大家心里一直...导致学习的时候,容易人云亦云或者东拼西凑,很难达到找工作的门槛,浪费了半年一年时间后又各回各家了,在这里,针对java学习者,分享一套比较合理的学习路线,可以针对就业针对性的去学习...
  • 从网上发现这篇文章,发现和我写的一篇关于《知识体系》的文章互相呼应,就转过来了。 ...怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:
  • Java学习路线图

    千次阅读 2016-11-11 16:24:40
    Java学习方法路线图,建议爱好Java 的朋友按照这个路线去学 这样比较系统,提示大家基础一定要学好啊。
  • Java从零基础到精通详细笔记高清完整PDF版

    千次下载 热门讨论 2014-01-07 10:47:03
    本文档为详细笔记,doc格式,共173页。包含内容: Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式。另附学习视频链接地址,欢迎下载。
  • java学习网站

    千次阅读 2011-12-05 10:17:26
    Java学习网站 [摘自互联网] Java学习网站 http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM的JAVA专题——永远的蓝色巨人 http://www.huihoo.com/ 灰狐动力——Enterprise Open Source ...
  • java学习笔记博客目录

    千次阅读 2011-11-04 23:17:45
     从10月7号发表第一篇java学习博客开始,学习java一个月了,该告一段落了,在此做个总结吧。  主要看的书是《java编程思想》、《java核心技术2》、《java语言程序设计》基础篇、还有就是网上搜的各种资料啰。其中...
  • 一点java学习思路

    千次阅读 2017-09-04 17:24:37
    从2016年3月份至今由于到了新公司,从事大数据方向的工作,由于是新成立的项目组,设计到工作的技术比较多,也比较杂,基本上是来一个新的项目都会涉及一些相关技术,都需要学习,比如hadoop,hbase,stome等。...
  • Java后端学习,推荐书籍和学习路线

    千次阅读 多人点赞 2019-04-16 13:28:37
    最近在学习Java和全栈开发,推荐一些有用的书籍 书架主要针对Java后端和全栈开发用的 书籍介绍 《Spring Boot 2.0企业级应用开发实战》 本书深入浅岀地讲解了 Spring与 Spring Boot所涉及的重要知识...
  • JAVA学习【知】学前准备

    千次阅读 2008-11-19 23:51:00
    很多新手在要学JAVA之前都会问如何...在要学习JAVA前的准备你需要下载的东西:1.JDK肯定有人问了 何为JDK?答:JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。JDK 是整个Java的核心,包括了Java
  • Java学习之路(书籍推荐)

    千次阅读 2018-04-02 09:01:16
    一、基础类1、《Thinking in java》(阅读2遍),入门第一位是建立正确的概念2、《Core Java》这本书更贴近实践,更多API的介绍,同样,更新也更频繁。(可以选重点章节读一下)二、进阶类1、《Effective Java》(阅读1遍...
  • 关于java学习的一点感言

    千次阅读 2006-03-24 22:51:00
    早在04年9月5日,发表了一篇小小的感想,关于java的初学第一课。但实际上,在那之后我并没有真正去学习这门语言,因为当时的工作环境,也因为自己的懒。现在大不同了。工作当中的主要工具就是java,我用JBuilder ...
  • java学习方向及主要内容

    千次阅读 2012-08-19 18:20:24
    建议如果学习java体系的话可以这样去学习: *第一阶段:Java基础,包括java语法,面向对象特征,常见API,集合框架; *第二阶段:java界面编程,包括AWT,事件机制,SWING,这个部分也可以跳过,用的时候再看都能...

空空如也

1 2 3 4 5 ... 20
收藏数 9,825,895
精华内容 3,930,358
关键字:

java