Linux下的Java


 申明一个临时的环境变量(只在单前打开的终端有效)
 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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值