JAVA学习笔记(一)

一. 简介

前言

    
由于国内.net市场日渐萎靡,越来越少的企业使用.net,越来越多的企业投向JAVA的怀抱,一大批.net程序员的生存受到了极大的威胁, 在这生死存亡的时刻我们需要做出改变,以顺应时代的变化!

为什么是JAVA

    
java从1995年诞生至今饱受争议,风风雨雨已有20几年的历史,一路披荆斩棘,确定了自己的霸主地位,生命力顽强,常年雄踞编程排行榜第一位,就业广泛、待遇丰厚,使用JAVA的大厂有阿里巴巴、京东、美团、头条、拼多多、拍拍贷、携程、微盟等等等等,其中京东、拍拍贷、携程、微盟都是从.NET转向JAVA。

编程排行榜

    
什么跨平台,面向对象就不说了,现在很多高级语言都有,一些特性,性能甚至比它还要好,就拿c#来对比,单从语言层面来讲要比JAVA优秀的多。

    
现在看来最关键的还是强大的生态圈,在国内又有阿里这种超级大厂支持,并开源了很多优秀的框架和组件,给java程序员提供各种解决方案。

JAVA三大体系

  • Java SE(Java2 Platform Standard Edition,标准版)
  • Java EE(Java 2 Platform,Enterprise Edition,企业版)
  • Java ME(Java 2 Platform Micro Edition,移动版)

每个版本有对应的jdk(Orcale JDK和Open JDK)

JAVA三大体系

JDK,JRE,JVM是什么

    
先了解下JDK,JRE,JVM是什么,他们之间有什么关系。

    
JVM :英文名称(Java Virtual Machine),就是我们常说的JAVA虚拟机,它能将JAVA源代码编译成的.class文件中的字节码指令翻译成计算机能识别的机器码让计算机执行,JVM是java跨平台的核心。

    
JRE :英文名称(Java Runtime Environment),Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。

    
JDK :英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。

    
显然,这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。

    
JAVA开发人员只需要安装JDK(JDk包含JRE,JVM),非JAVA开发人员需要运行JAVA应用的话,可单独安装JRE。

下载安装配置

    
这里主要介绍下在windows环境下安装和配置,打开官网,选择Java SE版本选择Oracle JDK:

下载安装

点击进入下载页面,接收协议,并且选择适合自己版本的JDK,这里我们选择windows 64位jdk,如图:

选择对应版本

下载好之后进行安装,安装完成之后我们来进行环境变量配置,以win10为例,右击“此电脑”->"属性"->“高级系统设置”->“高级”->"环境变量":

配置环境变量
配置环境变量
配置环境变量

用户变量是指当前登录的用户,系统变量是针对所有用户,我们在系统变量里面设置,点击新建:

配置环境变量

1.设置JAVA_HOME变量,变量名输入“JAVA_HOME”,变量值为jdk的安装目录,点击确定。
然后在系统变量列表里面找到Path变量,点击编辑,然后点击新建:

配置环境变量

输入jdk安装目录下的bin目录,点击确定。
JAVA_HOME变量作用是和第三方软件约定好引用jdk的目录。

2.设置Path变量,Path变量是命令搜索变量,在cmd命令窗口下输入命令会到指定的目录搜索命令。

来写一个HelloWorld

    
新建一个HelloWorld.java文件,打开文件输入如下代码:

 public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

进入cmd命令提示符窗口,进入文件当前目录,输入:

javac HelloWorld.java

将java文件编译为.class文件(字节码文件),然后输入:

java HelloWorld

运行程序。

[图片上传失败...(image-2ecb1f-1554131747890)]

main方法是程序的入口,args是可以接收的参数,我们将上面代码改造一下:

public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("参数1:"+args[0]+",参数2:"+args[1]);
     }
 }

在cmd命令窗口输入

javac -encoding utf-8 helloworld.java

(因为代码包含中文,可能会乱码导致无法编译,所以使用-encoding utf-8指定编码格式)编译成class文件,然后输入运行命令

java HelloWorld 翠花 上菜
注意:

    
java类名必须和文件名相同(不区分大小写),使用java命令运行程序时,java后面的名称是类名称(区分大小写)。

运行带包名的类文件

    
我们看下带包的类是如何编译和运行的,先将上面的代码再改造一下,改成带包的类,在第一行加入如下代码:

package cuihua;

完整代码如下:

package cuihua;
public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

把上面的代码放入名为cuihua的目录,在当前目录输入如下命令:

javac helloworld.java
java HelloWorld

[图片上传失败...(image-842e4a-1554131747890)]

执行java HelloWorld命令时报错,找不到入口,因为运行程序的时候是通过包名再找到类名,包名和目录需要对应,所以运行带包名的类库执行命令时需要将包名带上,执行命令改为如下代码:

java cuihua.HelloWorld

[图片上传失败...(image-ab3bc2-1554131747890)]

还是报错,我们仔细看下,我们所在的目录是cuihua,cuihua下面没有cuihua文件夹,所以需要返回上一级目录,再执行上面的命令,命令如下:

cd ../
java cuihua.HelloWorld

[图片上传失败...(image-a3ce57-1554131747890)]

多层/多级包

    
有了前面的知识铺垫之后,我们来思考一下如果包是多层的情况下,这个HelloWorld代码怎么运行?现在我们将上面的包名修改一下,修改如下:

package cuihua.shangcai

完整代码如下:

package cuihua.shangcai;
public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

这种情况下,该类文件应该放在cuihua/shangcai目录下,运行时在cuihua上一级目录运行,在cmd命令窗口输入如下代码:

javac cuihua/shangcai/helloworld.java
java cuihua.shangcai.HelloWorld

[图片上传失败...(image-9c0743-1554131747890)]

JAVA运行机制

    
java是一门高级语言,所写的程序计算机是无法识别的,所以就需要一种解释器将它翻译成本地计算机能识别的机器语言,从我们写的java程序到计算机能运行程序需要经过两个步骤,一个是将java源代码编译成与平台无关的.class字节码文件,然后交给jvm逐行翻译解释本地计算机能识别的机器语言并运行,所以我们通常所说的java跨平台不是指的java语言本身跨平台,而是jvm跨平台,jvm屏蔽了计算机平台相关性,每个计算机平台都有单独的jvm实现,比如windows下可以安装windows版的jre,mac下可以安装mac版本的jre,linux下安装linux版本的jre。


运行机制

JIT编译器

JIT也叫做即时编译器,是一种动态编译技术,起初java运行性能远低于c/c++ 这类静态编译语言,自从引入JIT编译器之后,java可以提供与c/c++相当的性能,甚至还会高于它们,javac属于前端编译,jit属于后端编译。

graph TD
字节码文件 -->JIT编译器
JIT编译器 -->A{"是否已编译本地机器码"}
A --> |是| 执行本地机器码
A --> |否| 方法调用计数器+1
执行本地机器码 
方法调用计数器+1 --> B{"计数器是否超过阈值"}
B --> |是| 向编译器提交编译请求
B --> |否| 以解释方式执行方法
向编译器提交编译请求 --> 以解释方式执行方法
以解释方式执行方法 --> 结束
执行本地机器码 --> 结束
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354