#Java课程(1)#与java的一次邂逅


今天开始我们来进行java的系统学习,小伙伴们一起加油吧!


J ava语言之发展


J ava的出生地 是SUN Microsystems Inc 。SUN公司最初的方向是让java来开发一些电器装置程序,如:机顶盒、公交卡,SUN公司万万没想到java会引来这么多企业的关注,所以才又继续往网络编程方向拓展, 记住这个公司,不过黄掉了,被 Oracle 收购了,Oracle呢,目前也是世界上数一数二的互联网相关的公司。目前看是世界前几的互联网公司,全世界上数一数二的开源公司应该是 Microsoft Google apple Oracle sap( 专门做 ERP ) Apache,阿里巴巴也在努力,以后也会有希望进入世界前几。这几年新出的一个语言, apple 公司出的供于 iphone 的语言: Object C ,但是诸多缺陷,现在改成 Swift 了。


我们说回java,这个语言历程很丰富,也很有趣,目前是很受程序员和企业的喜爱的和使用的。


 


我们看到的各种java图标都是一杯热咖啡,能想象到这咖啡和计算机编程有什么联系么?当然,这杯热咖啡还有java这个名字,是java创始人员团队中其中一个成员由于灵感想到的,因为是在java岛(爪哇岛)上曾经喝过一种美味的咖啡,他也将这个语言命名为java,和牛顿的那个苹果一样,都是伟大的东西,真想去看看java岛到底是什么样的,也去喝一杯咖啡。java之父就是詹姆斯·高斯林。(下面这个老头,哈哈)


 



Java之父——詹姆斯·高斯林出生于加拿大,是一位计算机编程天才。在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统。是JAVA的创始人。



J ava 1991年 诞生啦(那一年还都没出生呢吧,哈哈), 1995 年正式发布(发布的时候你们应该都没有出生呢吧), java1.0 ,在开发程序的时候会有 java7 ,其实这个就代表 java1.7 版本,现在已经发展 20 年左右了,现在到 java8。


不过你们说是发布的版本多好还是少好呢?(这个好不是说判定这个语言的好坏,是你觉得对于学习来说哪一种比较好)

 


当然是少好啦,因为 java 漏洞比较少,作为 java 程序员不用有太大的改变就可以跟上时代的潮流,你就可以非常安心的学习啦。现在的 ANDRIOD 就是非常不稳定,经常改版,所以就要多跟上时代的潮流,这个正处于发展中,不过前景很好, 以后的智能数码设备大多都会用这个做的,智能电视,智能机器人,智能路由,智能遥控器等等等等。而且起点也很低,你有 java 基础就可以哦。

 


java的竞争对手及各自优势

C#, Ruby Python

 


c#:java和c#都摒弃了C++艰难,晦涩的语法和语义。


其实当年微软也一直加入到java语言阵营中,但后来SUN公司对其提出了诉讼,说违反了java的条例条款,最终微软才停止了开发。从此成为敌人啦,一直站在对立面,甚至在window xp系统中不再提供java环境的支持。


接下来,微软推出了.net平台,并发布了C#语言,无论从哪个角度看,C#都是对java语言的反击。但是从技术角度看呢,C#和java都是对传统的面向对象编程在组件化的时代的革新成果,咱们用着方便就好啦。


C#独特优势:独特的开发平台提高了开发效率,比java更适合windows平台

但java的设立宗旨是适用于各个平台,自然不会提供太多windows特性,但是这也是其优点。


就语言来说,C#最近还算很火,但是似乎一直有些没有力量,不过高级语言还算是趋势吧。


入门难度:★★★


代码优雅度:★★★★


Python:面向对象的解释型语言,具有脚本语言中丰富和强大的类库。简洁而且清晰。Python在编程领域的占有率持续提升。


Python是1989年开发的,时间相对比较长,是基于ABC教学的,ABC这种语言非常优美和强大,是专门为非程序员设计的,但是ABC语言并没有获得广泛的应用。


python是一种面向对象的解释型编程语言,也是功能强大的通用型语言,成熟而且稳定。python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常使用。


python的两大特色是可扩展性和清晰的语法。微软也将其纳入.net平台。


就语言来说,python应该是最高大上的语言了。


入门难度:★★★


代码优雅度:★★★★★


Ruby:完全跨平台。简洁性和易用性在中小型应用上发挥巨大作用。Javaee提供了更多的选择,也被大型企业所青睐。


由日本人开发于1993年,经历两年,发布了第一个版本。ruby是一种非常简洁的语言,解释型,一种纯粹的面向对象编程语言,甚至比java更纯粹。因为在java中,还有基本数据类型等不适对象的变量,但在ruby语言里,一切都是对象。


ruby最大的特征就是简洁,还有一个优点就是跨平台。想了解的可以学学。


入门难度:★★★


代码优雅度:★★★★


java:可以跨平台,速度也还可以,因其综合性很高一直被人们叫好。


就语言来说,也就是入门简单,代码优雅,开源等,也是最有噱头的语言,也是明星语言,被较多的人使用。


入门难度 :★★★

代码优雅度 :★★★★

另附上其他的语言的一些比较

C,C++,PHP

C:可以说是最令人崇拜的语言,似乎是一个鼻祖形式的语言,所有人都对这个有些感触。

入门难度:★★


代码优雅度:★★★


C++:好多人都知道这个语言的难度很高,最神秘,C++的大神绝对是非常吃香的,因为很少有人能对这个做到了如指掌。


入门难度:★★★★


代码优雅度:★★★



php:在这里不应该和java做比较,但是因为也很主流了,就拿过来比较一下,一句非常有名的话就是php是最好的语言!简直低调奢华有内涵!真的能发挥很大作用,到时候我们也来简单了解下。


入门难度:★★★


代码优雅度:★★★★


java程序运行机制及核心概念

来看J ava应用程序运行机制:


计算机的高级编程语言类型:

一共有两大种,编译型和解释型,java 是两种的结合,一种中性的语言。 编译型语言有缺陷,当然也有优势。比如 C++ ,速度快,因为他不能跨平台,编译出来都是 exe文件(这里应该知道exe是干嘛的吧,是在windows系统下的文件,如果你是windows,那你就知道了,好多都是exe为后缀的文件,比如飞鸽就是exe后缀的文件) ,都是在 windows 下用的。


说到这里,操作系统都有什么呢, windows linux unix mac solars dos dos windows 其实是两个系统,大不了说 dos 是在 windows 下运行的。


还有一种是解释型语言,正好和编译型语言相反,可以跨平台,他的数据类型( int char String 这些后面讲)不依赖于平台。所以他就会稍微慢一些。


你们说你是属于什么类型的呢?

这个就是你兼顾几件事来看,如果说你只兼顾一件事,肯定是就快,但是你兼顾的事情多,那你就会很慢,举个栗子( 哈哈 ) 如果你得钱的来源是从你父母那里要,或者是现在自己也能赚钱,那你养自己挣钱肯定快,但是如果你是个男人,娶了老婆生了孩子,那你的钱要养一家子人,肯定就会慢一些,那就是解释型啦。

解释型语言,比如:V B Basic


世界上最大的解释器,我们每天都在用,解释三种语言,HTML,CSS,JavaScript ),那就是浏览器!是世界上最常用的解释器。

java 又跟他们有什么关系呢, java 是后台控制的,控制前端的这三种语言。

话说回来,java 是中性语言,先编译后解释,先编译成字节码 class 文件,再解释到平台。


核心概念:

JVM :java virtual machine   java虚拟机



java虚拟机是java的一个核心的东西,非常之重点,在面试和笔试中也会经常出现,JVM到底是什么呢,如果细说那根本说不完,而且也不适合,简单的说一些,JVM是一种规范,是一个虚构出来的计算机,通过在实际的计算机上模拟各项计算机功能来实现的。


因为java的一个非常重要的特点就是能跨平台,而使用java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上面运行的话至少要变异成不同的目标代码,引入了java虚拟机,便可以在不同的平台上运行,不用再重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。


java语言是先编译后解释,步骤如下:

  • 加载代码(由 class loader 完成)

  • 校验代码(由 bytecode verifier 完成)

  • 执行代码(由 runtime interpreter 完成)


JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。


java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。



JVM执行程序的过程 :


  • 加载.class文件

  • 管理并分配内存

  • 执行垃圾收集


JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。


JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就虚拟计算机.操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境。


1.创建JVM装载环境和配置

2.装载JVM.dll

3.初始化JVM.dll并挂接到JNIENV(JNI调用接口)实例

4.调用JNIEnv实例装载并处理class类。




JVM运行原理

JRE :java runtime environment java运行时环境


JRE也同样是java中非常重要的核心关键词,在这里简单说下:


java运行时环境,运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

是Sun公司的产品,包括两个部分:Java Runtime Environment和Java Plug-in。JRE是可以在其上运行、测试和传输应用程序的java平台。包括java虚拟机,java核心类库和支持文件。不包括开发工具(JDK)--编译器、调试器和其他工具。JRE需要辅助软件-Java Plug-in,以便在浏览器中运行applet。


Java Plug-in软件允许Java Applet和JavaBean组件在使用Sun的Java Runtime Environment(JRE)的浏览器中运行,而不是在使用缺省的Java运行环境的浏览器中运行。Java Plug-in可用于Netscape Navigator和Microsoft Internet Explorer。




J2RE是Java2 Runtime Environment,即Java运行环境,只是强调其匹配Java2平台,有时简称JRE。如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK(JRE和JDK的区别)。在JDK中附带有JRE。注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK。



GC :garbage collection (垃圾回收)如果没有这个会大量出现蓝屏的现象,也就是内存泄漏。


java垃圾回收是JAVA特有功能,垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。


在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。


垃圾收集能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程的时候,靠垃圾收集机制可大大缩短时间。其次是它保护程序的完整性, 垃圾收集是Java语言安全性策略的一个重要部份。


垃圾收集的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象,而且最终释放没用的对象。这一个过程需要花费处理器的时间。其次垃圾收集算法的不完备性,早先采用的某些垃圾收集算法就不能保证100%收集到所有的废弃内存。当然随着垃圾收集算法的不断改进以及软硬件运行效率的不断提升,这些问题都可以迎刃而解。


一般来说,Java开发人员可以不重视JVM中堆内存的分配和垃圾处理收集,但是,充分理解Java的这一特性可以让我们更有效地利用资源。同时要注意finalize()方法是Java的缺省机制,有时为确保对象资源的明确释放,可以编写自己的finalize方法。


J ava的引用类型就是指针类型,也需要释放,在 java 中是自动释放,借助于 GC ,举个例子,你扔的垃圾,扔到楼下,就会有车给拉走,那就是 GC 。如果你家里的垃圾一直不扔出去,那后果会怎样嘞?



JDK:java development kits             java开发工具集


是Java 语言的软件开发工具包



JDK包含的基本组件包括:


javac – 编译器,将源程序转成字节码

jar – 打包工具,将相关的类文件打包成一个文件

javadoc – 文档生成器,从源码注释中提取文档

jdb – debugger,查错工具

java – 运行编译后的java程序(.class后缀的)

appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。

Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。

Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

Jconsole: Java进行系统调试和监控的工具



java技术体系架构


自从java1.2版本发布以来,Sun公司每次发布java新的版本,都是三个体系:


  • J2EE:java 2 Enterprise Edition    web的知识都在里面。

  • J2ME已经淘汰了,塞班用这个。

  • 我们现在讲的是J2SE:java 2 Standard Edition 标准版


面试的时候可能会涉及到这些基础(肯定是一带而过啦)




推出5.0版本后,Java体系名称改成了Java ME(Java, Micro Edition)、Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)。把2去掉了,换成版本5啦!版本号就直接在后面加了,java SE 5,java EE 5等等,这样不容易混淆了,大家看着也都方便了。





JavaSE:是Java技术的核心和基础。我们最开始就讲它,从这个讲起的。它是J2ME编程和J2EE编程的基础。在这个体系上呢,可以进行桌面应用、网络应用等软件的开发,都是一些小项目,小程序,真正的在后面呢~


JavaME:主要用于移动设备和信息家电等有限存储的设备。这类设备的特点是:屏幕比较小、内存比较小、有可能没有持续的连接网络能力、电源可能不是持续的等。Sun公司呢,在JavaSE的基础上,根据这些设备的特点,划出一个用于这类设备编程的J2ME版本(也就是一个JavaSE的精简版本,降低对硬件的要求)。比如大家非常熟悉的手机Java程序,在早期比较落伍的手机硬件设备上,Java可是体现了巨大的作用,不过随着这些年智能化手机的发展,JavaME的发展渐渐出现颓势。一般都不用了,咱们涉及的也少,或者说几乎不涉及。


JavaEE:是目前Java技术应用最广泛的部分。这个是你以后工作天天面对的东西,找工作这个部分也是关键。


J2EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性,方便进行数据库操作的JDBC API, 以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise Java Bean)、Java Servlet API、JSP(Java Server Pages)以及XM L技术的全面支持。其最终目的就是成为一个能够使企业软件开发者大幅缩短软件的开发周期,能够进行健壮安全高效的企业软件研发的体系结构。J2EE体系结构提供中间层集成框架,用来满足无法提供太多费用,而又需要高可用性、高可靠性以及可扩展性的应用的需求(这个优势很明显,并且大量的Java开源开发框架,几乎将Java应用软件的开发降为了零成本)。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise Java Bean,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。先暂作了解。



开发 java 之准备


编写你的第一个 java 程序

第一步:安装JDK

下载地址:http://www.oracle.com/technetwork/java/javase/downloads


这里需要注意的是:不同的环境不同的系统JDK文件是不一样的,甚至32位和64位也是不一样的,这个一定要注意一下,选择自己机器的版本下载。


下载完了之后去计算机上找到这个目录,在第一个里面点击



这个里面就是JDK的一些内容,其中有个bin目录
 
打开之后好多exe文件,主要 有两个是要注意的,一个是java.exe,一个是javac.exe。这个有个印象就可以,之后我们真正写程序的话就是通过这样的方式写,像前面提到的,先编译,后解释。所以java才能跨平台。


里面还有一个lib目录,这个是以后开发java的时候用到的一些类库,点进去的话都是后缀为.jar文件,以后真用的时候就知道啦。



第二步:配置环境变量


我们一般会配置这样几个


  • JAVA_HOME    用来配置JDK的安装路径

  • PATH         配置JDK命令文件的位置

  • CLASSPATH    配置类库文件的位置




如何配置呢?


计算机---右键属性 高级设置---环境变量(里面的变量都是系统变量)---系统变量 path----编辑系统变量,要在上面追加,千万不要全删掉,是追加!在这一行的最后(按键盘上的end键)加一个分号(半角的即英文的分号),然后去找到jdk的安装路径,找到jdk那一级,把路径粘贴到路径的后面,

 


 


 

找自己jdk的安装路径(把路径粘贴到后面)


 


在后面追加的这个路径是刚刚的JDK的这一层


 

配置classpath变量的时候就是这样,还是刚刚变量的部分,没有默认的这个变量。


 
新建之后变量名就是CLASSPATH,然后下面的变量值就是.;(一个点加上一个分号)后面加上lib目录的路径,点确定就行了。


到这里就Ok啦!


第三步:确认


下面就是确认自己的jdk是否好使,在下面按cmd进入dos系统

 

输入 java,然后按回车,出这些就ok

 

然后再按javac,出现了这些就ok




编写第一个java程序


最初的时候可以用 UnitEdit(一个软件,可以自行下载) 编辑,现在开始编程第一个程序 ( 我们最开始先使用记事本或者 UE 编辑,最好不要上来就使用工具 )


无论是用记事本还是什么编辑,都要有几步:


  • 第一步:编辑一个.java源文件


  • 第二步:使用编译器编译成字节码文件.class


  • 第三步:使用解释器


  • 第四步:就能看到你编写的程序运行之后的结果啦



来看第一步 :要在桌面上建立一个文件,后缀为txt,你需要改成HelloWorld.java


------------------------------------------ 



(中间会问是否要更改文件的扩展名,可能会导致不可用,你点击确定就可以了)


第二步,我们打开来编辑


P ublic class HelloWorld{

公共的   类

}


先写好这个轮廓。


Control +s保存一下,自己建立一个专门存放的文档,保存到这个文档中。你存在这个文件中的文件名一定要和你的类名是一样的,所以也要是HelloWorld,大小写也要一样哦,所以存为HelloWorld.java

然后回头继续

P ublic class HelloWorld{    //公共的类

P ublic static void main(String []  args{//开始写第二层,即主函数,也是先写好轮廓。

}

}

注意写代码的规范,写的不规范的话呢,程序是没有错误的,但是不好看呀,

S tatic 表示静态的,之后会将动态的,void指的返回值为无,

然后开始写第三层,打印hello world

P ublic class HelloWorld{

P ublic static void main (String [] args){

System.out.print(“你好,牛客网!”);//要打出一个字符串,是实参,所以要加双引号,但是一定要是英文的双引号,当然,里面没有人管了,你想输出什么就输出什么

}

}

写完第一个程序了,现在我们来看一下这个程序,注意不要写到}外面去,一定要几下来,怎样写java程序,现在要去练习一遍,课堂作业里也有,也可以等一下练习。


第三步:我们来进行编译


点击cmd,弹出dos界面


如果是你的文件是存在c盘,那没有问题,如果是存在了e盘或者什么盘,那就在命令的后面打上e,然后回车


 



再往下如果你又存在了某个根目录下你就直接再输入目录的名字回车就可以了


之后就是编译,输入javac HelloWorld.java,回车


这个位置一定要注意大小写



这个时候我们再来看一下变化,点进所存的目录里面,我们发现多了一个字节码文件

 



但是这个字节码文件打不开哦,不能直接运行的。


第四步来执行


输入java HelloWorld,回车,就可以看到运行结果啦


来看一下这个代码:




我们已经写了第一个java程序,针对经常犯的错误在这列了出来,看到别人错的,也就知道了自己,或者说碰到了另外一种情况,下次你遇到也就会解决啦!



至于程序为什么这样写,你们记住就行,之后会慢慢解释这些。

 

新手常见错误

  • M ain携程mian

  • 类名保存不一致

  • System的s要大写

  • 符号的中英文不对

  • 在输出的实参里面没有加双引号。

  • dos中最开始是默认C盘的,你可能存在了D盘,那你就要输入这个d: 进入到d盘中,然后输入指令 cd src(你存的文件名),然后输入指令:javac HelloWorld.java,回车,在你保存的目录中就生成了一个class文件,然后再输入指令:java HelloWorld

然后这个时候再试一下你编译的程序,看看结果能不能生成吧。

写java程序的规范



写java程序一定要注意规范,当然,这不仅限于写java代码,你要写别的语言的代码,也是一样的。这就好比你做什么事情都要有个规矩规范一样。


这就涉及到你写代码的这个规范了,这里告诉大家一下,会慢慢的给大家渗透,大家平时就要养成好习惯。因为以后面试的时候很多面试官都会看你写代码的习惯。




关于这个程序,我们来说一下为何这样写,让你有个印象,之后我们还会详细的说每个部分。


因为java是一种纯粹的面向对象的程序设计语言,所以java程序必须以类的形式存在,class就是类,所以我们都会建立public class Niukewang 这样的类。

在java的世界中,类是最小的单位,万物皆对象,这个跟我们实际的世界是一样的。java程序不允许可执行性语句,方法等成分独立存在,不管是什么程序,不管是程序的哪个部分,都要在类里面实现。



所以我们写程序,要先建个类,然后在类里面实现。{}


经验分享

  • 多打代码


代码是一定要多打的,你不打代码你也不知道自己哪里真正有问题,牛客网就可以在线打代码,你做一道题目的时候就方便了很多。(可以自行去牛客刷题)


  • 多问

问是一门学问,也是一种习惯,你不懂的地方就要去问,但是我没有完全的说这个是个好习惯,因为不要遇到难题就想着别人,这样你会丧失独立思考的能力,所以这的问是建立在你思考之后的问。


  • 自己动手debug错误

自己动手解决问题,你才能知道下次遇到了该怎样,问题是积攒出来的,最开始的基础没有打好,什么困难自己都解决不了的话,那到后面会越来越难。


  • 养成写的习惯

善于写博客的人都是大神,记录你学习过程中的点滴,最后收获的绝不仅仅是一点点,把自己的知名度提升了的同时,也学会了知识,还帮助到了他人,真的是一个再好不过的事了!


牛客网就给你们提供这样的平台,而且现在有活动,写出你自己的原创文章并发送给牛妹,在活动期间得到最多赞的人还可获得kindle奖励!(这只是其中之一的奖项)


  • 多思考

多思考才能进步,要知道,思考的过程是最珍贵的,也是你提升最快的途径。


作业


HelloWorld练习5遍。不要怕麻烦,努力都是会有回报的哦

全部评论
赞一个,写的不错!
点赞 回复 分享
发布于 2016-02-16 10:36
牛妹帖子,的无条件点赞
点赞 回复 分享
发布于 2016-09-22 22:55
赞,牛妹我已经爱上了你。
点赞 回复 分享
发布于 2017-04-10 23:43
新手常见问题哪里,“携程”改“写成”
点赞 回复 分享
发布于 2019-04-17 23:27

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
11 37 评论
分享
牛客网
牛客企业服务