申明一个临时的环境变量(只在单前打开的终端有效)
export 变量名=变量值
环境变量的调用echo $变量名
查看命令所处的位置which 命令关键字
e.g.:
which ls - -> /bin/ls
echo $PATH 查看单前系统的所有命令存放的位置
注意:操作的命令都是基于PATH找到的
PS1=‘用户名’ 设置用户在终端显示的名字
export PS1=‘(- _ -)’
安装插件命令
sudo apt-get install 插件的名字
配置文件
家目录下:.bashrc .profile
etc配置文件: bash.bashrc profile
注意:一般配置信息在家下.bashrc,原因:每开启一个
终端都会加载一次,像其他的配置文件一般是系统启动的
时候加载。
配置jdk,linux下的配置方式
1找到jdk的位置
sudo tar -xzvf jdk-8u91-linux-x64.tar.gz
-C /opt
2.给/opt下的jdk建快捷方式(链接文件),
cd /opt
sudo ln -s jdk1.8.0_91 jdk
3.回到家目录,打开.bashrc
cd ~
vi .bashrc
在.bashrc的最后面加内容
export JAVA_HOME=/opt/jdk
export CLASSPATH=$CLASSPATH:.
export PATH=$PATH:$JAVA_HOME/bin
进入底行模式
:wq
4.让.bashrc生效的命令
source .bashrc
5.验证配置是否正确
java javac
java -version 查看java版本
JAVA_HOME 配置指向jdk的位置,
作用,很多软件的运行需要到环境变量中加载JAVA_HOME
e.g.: tomcat
CLASSPATH 编写的java的程序最终是被java虚拟
机(JVM)加载到内存,加载的过程回去找代码,代码
去哪里找就看CLASSPATH
PATH 软件的执行命令都是配置在PATH中
tar.gz 文件的解压和压缩
-c: 建立压缩档案
-z:有gzip属性的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
-x:解压
-v:显示所有过程
e.g.:
压缩文件
tar –czf jpg.tar.gz *.jpg 生成一个gzip压缩过的包,命名为jpg.tar.gz
解压文件
tar -xzvf file.tar.gz -C /opt
JAVA
Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称
大的分类:
J2SE 桌面应用的开发 JAVA SE
J2EE 企业级开发 JAVA EE
J2ME 手机应用的开发 JAVA ME
sdk|jdk|jre|api名词的理解
SDK(Software Development Kit):软件开发工具包,辅助开发某一类
软件的相关文档、范例和工具的集合都可以叫做“SDK”。SDK是一系列文件的
组合,它为软件的开发提供一个平台,一些被软件工程师用于为特定的软件包、
软件框架、硬件平台、操作系统等建立应用软件的开发工具
jdk只是sdk的一种(子集),因为它是开发java程序的一个平台,
开发其他程序的sdk可以没有jdk
JDK java development kit 是面向开发人员的,java开发工具
JRE java runtime enviroment java运行环境,是面向应用程序使用者的
API application program interface 应用程序编程接口,工具的说明文档
Jdk的目录结构
bin: 存放java的执行命令,详情参考java-command.txt文件,该目录应当保存到PATH变量中
Lib:是JDK工具用到的类库及其他文件,eg:tools.jar就包含了对开发工具的支持功能库
jre: java的运行环境(包含了java的类库和JVM虚拟机)
src.zip:jdk提供的类库的java代码
db:jdk自带的小型数据库
Include:包含c语言编写的文件
java的特点:
加速开发
写一次,到处运行
支持程序多线程的出来
动态的支持升级及编译
没有指针,不需要管理内存,纯粹的面相对象编程
提供gc的支持
垃圾回收器(GC)
垃圾回收器:java中有一个线程,专门负责JVM中垃圾内存的释放
垃圾:没有引用的内存节点
垃圾回收的算法
注意:垃圾回收有自己的算法,我们是不能控制垃圾回收机制的,虽
然有和垃圾回收相关的方法:java.lang.System.gc()
java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制
算法有(知道算法名字即可,不需要下去研究具体实现):标记-清除,
复制,标记-整理,分代收集
Java程序执行的整个流程
Hello.java- -编译 ->Hello.class- ClassLoader装载- ->JVM- ->字节码验证
- ->对字节码逐行解析- ->执行
- ->JIT(即时编译) - ->执行
JVM装载.class 文件到内存的过程剖析(双亲委托机制)
启动级类加载器(Bootstrp ClassLoader)用C++语言写的,它是在Java虚拟机启动后初始化,
它主要负责加载%JAVA_HOME%/jre/lib,
-Xbootclasspath参数指定的路径
以及%JAVA_HOME%/jre/classes中的类
扩展级类加载器(Extension ClassLoader)用java语言写的,它负责将
%JAVA_HOME%/jre/lib/ext或者由系统变量 java.ext.dir指定位置中的类
库加载到内存中。开发者可以直接使用标准扩展类加载器。
本地类加载器(Applicaiton ClassLoader)用java语言写的,用于加载我
们自己定义编写的类,它负责将系统类路径(CLASSPATH)中指定的类库加载到
内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader
中的getSystemClassLoader()方法的返回值,因此一般称为系统
(System)加载器
双亲委托机制加载类的过程
当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,
而是把类加载请求委派给父类加载器扩展级类加载器去完成。
当扩展级类加载器加载一个class时,它首先也不会自己去
尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
如果扩展级类加载器加载失败,会使用扩展级类加载器来尝试加载;
若扩展级类加载器也加载失败,则会使用本地类加载器来加载,
如果本地类加载器也加载失败,则会报出异常ClassNotFoundException。
生成jar包和解压jar包
-c 创建新的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-x 解压归档文件
打包
jar -cvf Hello.jar Hello.class
解包
jar -xvf Hello.jar
字节码验证过程
代码要符合JVM的规范
代码破坏计算机的系统或者硬件
栈不能溢出
方法的参数类型要正确
类型转换要正确
JIT(即时编译):通过代码的运行,基于2080规则基于算法
找出里面重复率比较高的代码存储起来,下次调用的时候不需要
在编译,直接执行。
java文件中的三个顶级元素:
package
1.最终会是以文件夹的形式体现出来(有什么包,就必须有什么文件夹,运行
的时候.class文件必须在这个文件夹下面)
2.java文件中有多个package的时候,用.分割并且结尾用;号结束 例如:(com.briup.test;)
3.包也是java中类的标识的一部分,确定某一个类是通过包名加类
名来唯一确定的 比如运行java类的时候:java package.类名
(java com.briup.test.HelloPackage)
import
1.导包用的关键字
2.如果你想在当前这个类使用其他的类,那么就必须通过这个关键字,把那个类导入进来
3. java.lang包下面的类可以直接使用,不用导入.
4. 和当前这个类位于同一个包下面的类,也不需要导入,可以直接使用
class
java中标识一个类的关键字
(java类中可以没有package,也可以没有import,但是一定会class,
类中可以出现多个class,但是public class 必须只能有一个)
案例
编写带包名的类 HelloPackage.java
package com.briup.test;
public class HelloPackage{
public static void main(String[] args){
System.out.println("hello world");
System.out.println("hello world");
System.out.print("hello world");
}
}
直接编译 javac HelloPackage.java
然后运行 java HelloPackage 报错!!!
解决报错的方式
在当前目录下面建立文件夹 com/briup/test
然后把HelloPackage.class文件剪切到了这个test目录里面
然后在单前目录下运行:
java com.briup.test.HelloPackage
简化操作
以上建立文件夹并且把.class文件剪切到相应的文件夹里面的操作
,我们可以用命令在编译的时候实现
javac -d . HelloPackage.java
-d 表示编译的同时生产和这个.java文件中定义的包名相一致的是文件夹结构,
. 表示在当前目录下生产这个文件夹(这个不一定非是. 也可以是其他路径)
最后编译完成后的.class文件也会自动的放进生产的文件夹里面
然后我们之间用package.类名去运行就可以了
java com.briup.test.HelloPackage
注意事项
注意:没有main方法的类是不能直接运行的
main的形式是固定的(大体是固定,之后会看到改动一些指定地方也是可以的)
public static void main(String[] args){
......
}
因为main方法是程序的入口,要直接运行的那个类,类加载之后,
JVM没有在这个类中找个main方法,那么就会报错,JVM只会运行
java命令后面*指定的类中的main方法(如果没有这个方法就报错)
java com.briup.test.HelloWorld