按照我写博客的习惯,我总喜欢用一些通俗易懂的语言来讲解一些知识。专业性上可能比不上那些专业的博客作者,但我会仅我所能让大家都学会知识。也欢迎各位大佬指点,相互学习进步。
所以关于Java的知识就让我们从这杯咖啡开始
一.趣谈Java
奇迹是没有经过安排的发生,一个偶然便可能改变历史的轨迹。
Java便是如此在偶然间,携带巨大的能量横空问世,在人类IT史上演绎了一场科技大戏。
首先问大家一个问题。Java之父是谁?
Java之父是詹姆斯·高斯林(不是网络上说的某39.9)
Java是在Sun公司由他及其同伴共同创造的。像C语言一样,Java一开始并不是叫Java。最开始詹姆斯是做电子产品的,并且用的语言是C++。但由于后期涉及到互联网开放,使用C++导致编译会稍显繁杂。为了解决这个问题,我们的Java之父和他们的小伙伴们就有了一个想法......
他们在C++的基础之上创建了一种新的语言:Oak。Oak是简化版的C++,不仅灵活还更适合互联网应用开发。但事与愿违,由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。等到1995年代,互联网获得高速发展,Sun公司改造优化了Oak,就当他们准备以此名发布的时候,发生一件好玩又好笑的事:Oak已经被Sun公司的另一个语言注册商标。
正当一群“秃顶男人”围在一圈讨论该用什么名字来命名这门语言时,注意到桌子上的咖啡,又联想到当时一个盛产咖啡的小岛。于是,一拍即合便有了Java这个名字。在中国,也有了抓哇这个戏称。
二.Java的特点
Java的设计者编写了一个颇有影响力的白皮书,用来结束Java的设计初衷以及完成情况。他们还对Java的语言特性进行组织:
- 简单些
- 面向对象
- 分布式
- 健壮性
- 安全性
- 体系结构中立
- 可移植性
- 解释性
- 高性能
- 多线程
- 动态性
详细介绍可参考白皮书官网:https://www.oracle.com/java/technologies/language-environment.html
本文章只是用一些易于理解的方式,同时也会加上官方的解释。但如果是做专业性的研究的朋友,建议可以参考官方解释。
1.简单性
Java语言是C++语言的“纯净版”,没有像指针这种令人头大的部分,也没有操作符重载,联合等。
虽然Java语言剔除了C++中那些又难使用又不好理解的特性,但设计者在这“偷了懒”,没有修改所有C++中所有不适当的特性。所以,Java也在不断更新进步当中,希望有一天,看过这篇博客的你们也会为Java的发展做出一份贡献。
2.面向对象
来来来,注意了,分配对象了。
不过这个对象可不是你们生活里的男(女)朋友。而是Java里的对象
在Java中,你不仅可以有对象,还可以有无数个对象。
比如:人、狗、手机、电脑等都是对象。
而所谓面相对象,就是依靠对象之间的交互来完成事情,比如:人用手机网上购物,狗吃骨头,你们看我的文章...
Java的面向对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。
在Java中,取而代之的是更简单的接口概念。而且与C++相比,Java提供了更丰富的运行时自省功能。
3.分布式
对于这个点,嗯......由于本人学识尚浅,只能贴一段官方解释了。
Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络 上的对象,其便捷程度就好像访问本地文件一样。
4. 健壮性
如果你曾经学习或者了解过指针相关的知识,你多少会被其所困扰。而Java编译器就能很好的解决这个问题。Java编译器能够监测许多其他语言只在运行过程中才能监测出来的问题。对于像我这种被一个指针bug困扰好几个小时的人来说,这一特性无疑是极好的。
5.安全性
从一开始,Java就设计成能够防范常见的各种攻击:
运行时堆栈溢出。蠕虫和病毒常用的攻击手段。
破坏自己进程空间之外的内存。
未经授权读写文件
其实说到安全性,Java也是在在一次次调bug和一次次的与黑客的“较劲”中实现的。
这也告诉我们,程序有bug不可怕,你的水平也是在一次次的改bug中提升的。
6.体系结构中立
编译器生成一个体系结构中立的目标文件格式,只要处理器上有Java运行时系统,这些编译型代码就可以在上面运行。
7.可移植性
与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。
在Java当中,数据类型的大小都是固定的。
举例而言:在Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。正因如此,当我们想要移植Java代码时,就会减少很多因为位数而产生的问题。
8.解释性
Java为了实现与平台无关,自己维护了一套基于栈架构的指令集,Java源代码经过编译之后,字节码文件中的 指令就是按照自己的指令集来组织的,但是在具体硬件环境中运行时,系统并不能识别,因为Java程序在执行 时,Java解释器会逐条的将字节码文件中的指令翻译成CPU的指令集。
9.高性能
随着技术的不断发展与进步,Java的编译器也在一步步走向完美。举例而言,即时编译器能够监控哪些代码在频繁的运行,编译器就会对这些代码进行优化。
这就跟现在的购物网站一样,如果你多次看统一类型的商品,当你下次再进入时,它会在首页给你疯狂推送。(但这种高性能对应的应该算是商家而不是顾客吧)
10.多线程
Java在当时很超前。它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互响应和实时行为。并发 程序设计绝非易事,但是Java在这方面表现出色,可以很好的管理这个工作。
11.动态性
Java与C/C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由的添加新方法和实例变量,而 对客户端没有任何影响。在Java中找出运行时类型信息十分简单
三.Java开放环境
1.JDK,JRE与JVM
1.1JDK
JDK,英文全称Java Development Kit,JDK是整个Java的核心,是Java程序的开放工具包,其中包括了Java编译器,Java运行工具,Java文档生成工具等。
JDK的安装目录下有六个文件夹,一个src类库源码压缩包以及几个声明文件。
在Java运行过程中真正起作用的是bin,include,lib,jre四个文件夹。
- bin:最主要的是编译器(javac.exe)
- include:java和JVM交互用的头文件
- lib:类库
- jre:java运行环境
1.2JRE
JRE,英文全称Java Runtime Environment,是Java程序运行时的环境JRE工具。只包含Java运行工具,不包含Java编译工具,同时也包含了JVM和运行时需要的核心类库。
上面我们提到过,JDK目录中有bin和lib这两个文件夹。我们可以将bin看作是jvm,lib则是jvm工作时需要用到的类库。
jvm和lib合在一起就称为jre,当写好的Java程序编写成.class文件时,就需要用到jre里面的Java.exe。
1.3JVM
JVM,英文全称Java Virtual Machine,是Java虚拟机,是JRE的一部分,负责将java程序生成的字节码文件解释成具体系统平台上的机器指令,同时也是Java实现跨平台最核心的部分。
关于虚拟机,我们可以这样理解:它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
1.4三者之间的关系
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
1.5Java开发环境配置
Windows下最简单的Java环境安装指南 - 大博哥VV6 - 博客园 (cnblogs.com)
四. 第一个Java程序
1.编写
public class Main{
public static void main(String[] args){
System.out.println("world Hello");
}
}
这就是Java的最简单的一个程序。
相信部分朋友看完程序后是这个表情。啥啊,这还算最简单的程序?
确实,Java的main方法应该算是当前主流的编程语言中最复杂的一个了。
别急,让我们把这个程序慢慢“肢解”,一点点的来理解它的特点以及每一部分表示什么意义。
1.1拼写问题
- Java语言是一门严格区分大小写的语言,如果出现大小写拼写错误,程序将无法运行。
例如:
正确:class 错误:Class
正确:String 错误:string
正确:System 错误:system
正确:main 错误:mian
- 标点符号的使用
不能用中文符号,英文半角的标点符号
括号要成对出现
1.2命名问题
在关键字class后面紧跟类名。
对于Java类名的命名,Java的规则较为宽松。
类名必须要以字母开头,后面可以跟着字母或者数字的任意组合。
但需要注意的是,和C一样,Java的类名不能用保留字。
驼峰命名法
类名一般以大写字母开头,如果类名是由多个单词组成,最好将每个单词的开头都大写。
2.运行
Java是一门半编译型、半解释型语言。先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节 码组成的平台无关、面向JVM的文件。最后启动java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够 理解的形式来运行。
前面我们提过,JDK的作用是十分重要的,这点在运行时就能很好的体现。
和C语言一样,Java程序的入口是main方法
3.输入与输出
换行输出语句:输出内容,完毕后进行换行,格式如下:
System.out.println(输出内容);
直接输出语句:输出内容,完毕后不做任何处理,格式如下:
System.out.print(输出内容);
4.注释
注释是为了让代码更容易被读懂而附加的描述信息. 不参与编译运行, 但是却非常重要。
用一端有意思的话来解释注释的重要性:
当一个程序刚写出来时,也许只有你和上帝看得懂
加上注释,你的同事们也能看懂
如果没有注释,一个月后,这段代码只有上帝能看懂了。
Java中的注释主要分为以下三种:
单行注释:// 注释内容(用的最多)
多行注释:/* 注释内容*/(不推荐)
文档注释: /** 文档注释 */(常见于方法和类之上描述方法和类的作用),可以被javadoc工具
解析,生 成一套以网页文件形式体现的程序说明文档
但需要我们注意的是,注释也不是随便写的,有着一定的规范
1.当文明人,注释里不要有负能量
2.如果是在中国公司,代码最好都用中文
3.不要长篇大论,也不要过于简单
4.注释的内容要和代码里的内容匹配,在修改代码后注释也要及时更新
5.标识符
标识符是在程序中由用户给类名,方法名或者变量所取的名字。
必须遵守的规则:
标识符中可以包含字母,数字下划线和$符号
需要注意的是:标识符不能以数字开头,也不能是关键字,且严格区分大小写。
建议遵守的规则:
类名:每个单词的首字母大写(大驼峰)
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)