关于Java的首次接触
什么是Java
“Java是一种为多个平台生成软件的编程语言。由Sun Microsystems的前计算机科学家James A. Gosling在20世纪90年代中期开发的。编译的代码可在大多数操作系统上运行。”
Java通过面向对象的编程语言。它不仅吸收了C++语言的优点,而且摒弃了C++中难于理解的多继承和指针的概念。具有简单性、功能强大、分布式、健壮性、安全性、平台独立与可移植性、多线程及动态性的特点。
Java语言作为静态面向对象的编程语言的代表,可以充分的实现面向对象的理论,并允许程序员以一种优雅的思维方式编程复杂的程序。可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。
说的直白点就是一种编程语言(汇编语言之后的一种语言类型),用这种语言和计算机产生交互。(计算机只认识“1010101”等)
什么是JDK
JDK全称Java Development ToolKit,是Java语言开发工具包。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK。IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求。
JDK是用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。它不提供具体的开发软件,它提供的是无论你用何种开发软件写Java程序都必须用到的类库和Java语言规范。
可以理解为你掉入了一个Java的世界,而这个世界的名字就叫做JDK。这个世界还有许多平行时空(不同的JDK版本)
什么是JVM,JVM的冷知识
JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机。
JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统“听”,告诉它我们的程序需要做什么操作。
我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是Java能一次编译,到处运行的原因。
JVM的冷知识
一个Java程序会开启一个JVM进程,如果一台机器上运行三个程序,那么就会有三个运行中的JVM进程。
JRE = 运行环境 = JVM。
怎么配置环境变量
计算机→属性→高级系统设置→高级→环境变量
添加自己的jdk\bin,建议最好配置为的bin目录
最后测试以下(Dos窗口中)
检验是否配置成功 运行cmd 输入 java -version (java 和 -version 之间有空格)
首个Java程序
HelloWorld
有个流传挺广的笑话:
某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下:hello world
很多人不了解程序员的人都觉得毫无笑点,其实如果你知道大多程序员学编程时第一课的内容时就明白了。
#include<stdio.h>
int main(void)
{
printf("Hello,World!\n");
return 0;
}
这段代码的结果,就是在屏幕上显示一行字:
在大多编程语言里,第一课会以输出hello world为演示,比如php的更简单:
<?php
echo "Hello,World!";
?>
为什么会有这么多的hello world呢
1978年,Brain Kernighan在他和Dennis Ritchie合作撰写的C语言圣经“The C Programming Language”中,延用了“hello,world”句式,作为开篇第一个程序。在这个程序里,输出的”hello,world”#include <stdio.h>int main(){print ("hello,world");return 0;}由于C语言在程序界里绝对大佬的地位,使得本书中这第一个程序成为了经典,让无数编程恐惧症患者得以顺利写出第一个程序,从而走上大神的不归路!
关于Java的内存
计算机内存
计算机是由CPU、主存、磁盘等组成的(简单引出问题熬)我们都知道计算机执行程序的指令都是由CPU来执行的,执行的时候是要处理数据的,这些数据通常存储在主存中。
Java内存模型
Java内存模型的作用就是用来屏蔽掉不同操作系统中的内存差异性来保持并发的一致性。同时JMM也规范了JVM如何与计算机内存进行交互。简单的来说java内存模型就是Java自己的一套协议来屏蔽掉各种硬件和操作系统的内存访问差异,实现平台一
致性达到最终的"一次编写,到处运行"。看到这里就知道了Jmm是用来做什么的。同时Java内存模型可以理解为java并发内存模型。然后JMM
通信
Java内存模型(以下简称JMM)规定了,所有变量都存储在主内存中,每个线程都有自己的本地缓存,所以线程中对变量的操作都必须在本地缓存中进行并不是直接操作主内存,线程之间的无法访问对方线程的变量,想要通信的话就只能通过主内存进行通信。
JMM抽象示意图:
从上图可以看出每个线程都有一个本地内存,如果线程想要通信的话要执行一下步骤:
-
A线程先把本地内存的值写入主内存
-
B线程从主内存中去读取出A线程写的值
到这里就对JMM有个清晰的理解了。JMM其实是一种规范,其主要目的就是为了解决多线程通过共享内存进行通信时所产生的本地内存数据不一致,编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。
解决的问题
JMM所解决的问题离不开我们上面所说的三大特性:可见性、原子性、有序性.
原子性:在java中使用synchronized关键字保证代码的原子性。
可见性:volatile关键字保证了多线程操控变量的可见性,同时synchronized和final也可以保证变量的可见性,注意:volatile并不保证原子性,所以什么时候用volatile一定要注意。
有序性:volatile可以禁用指令重排,synchronized关键字保证同一时刻只允许一条线程操作所以我们可以发现synchronized可以解决三种问题,所以使用synchronized关键字比较多,但是synchronized只允许一个线程进行操作,会造成上下文切换的效率问题。
java的一切都与内存有关,下面是java内存的结构图
后记Java和生活
首先生活中的一切都可以使用Java来进行模拟实现(这也正是Java面向对象的特点)
这里我首先推荐一本<<Java夜未眠>>书籍给一样喜欢阅读的我们。我也可以谈谈我的生活,为何想进入IT行业呢?可能是一个家长口中的网瘾少年吧。上初中的时候有幸解除了计算机,接触到了各种各样的神奇世界。也接触到了游戏,虽然家长口中的玩物丧志,但也这也给我这个平庸的孩子带来很多无与伦比的快乐。随后随着眼界越来越开阔自己也慢慢跳出了了游戏本身,开始喜欢研究整个行业,这才认识到国产游戏动漫行业的畸形发展和国内外文化差异的巨大。有了一丝想要振兴国产行业的愤青思想。上了大学以后了解到了IT行业,了解了程序猿,还有程序猿熟知的HelloWorld。自己几经周折依然选择来到了IT的怀抱,为了年少懵懂,也为了心中的绿洲,也为了中国IT贡献一丝微不足道的力量。
在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变的职业大牛,这是一个涉及到自身专业知识储备和选择的大难题。https://zhuanlan.zhihu.com/p/64947919 为了我以后的生活可以继续进行我也进行了一个自我的初步规划。
参加工作0-1年之间,继续深造web前端框架
参加工作2-3年,熟练掌握设计模式
参加工作3-4年,U3d和C#
参加工作5年,达到带领团队完成项目的能力
此篇博客有一些网上大牛整理话术的借鉴和引用,本人承诺绝不用于商业用途,只供自己学习参考使用。