java基础

配置

  • 安装后配置环境
    PATH, jdk下bin目录提供给操作系统寻找到Java命令工具的路径。
    JAVA_HOME, 全大写jdk安装目录,提供给其它基于java的程序使用
    CLASSPATH, 提供程序运行期寻找所需资源的路径。最好在classpath前面始终保持.;在windows里面.表示当前路径。

  • PATH环境变量。
    作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

  • CLASSPATH环境变量。
    作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中(强制java解释器在当前路径搜索Java类)。

  • CLASSPATH环境变量作用
    CLASSPATH是javac编译器的一个环境变量。它的作用与import、package关键字有关。当你写下improt java.util.时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦 :) 如果java.util这个package在c:/jdk/ 目录下,你得把c:/jdk/这个路径设置到CLASSPATH中去!当编译器面对import java.util.这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java/util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!CLASSPATH有点像c/c++编译器中的INCLUDE路径的设置哦,是不是?当c/c++编译器遇到include 这样的语句,它是如何运作的?哦,其实道理都差不多!搜索INCLUDE路径,检视文件!当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。

  • JAVA_HOME环境变量。
    它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

  • 示例:
    CLASSPATH= .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
    JAVA_HOME = C:/Program Files/Java/jdk1.5.0
    PATH = %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin

java程序运行过程

  • Compile, 编译,将代码翻译成计算机认识的字节码;
  • ClassLoader类加载,为执行程序寻找和装载所需的类
  • 字节码(byte-code)校验,保证代码安全性
    功能是对 class 文件的代码进行校验,保证代码的安全性。
    Java 软件代码在实际运行之前要经过几次测试。JVM 将代码输入一个字节码校验器以测试代码段格式并进行规则检查--检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码。
    注意所有源于网络的类文件都要经过字节码校验器
    字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM 规范并且不破坏系统的完整性。如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证:
  • 类符合JVM规范的类文件格式
  • 无访问限制异常
  • 代码未引起操作数栈上溢或下溢
  • 所有操作代码的参数类型将总是正确的
  • 无非法数据转换发生,如将整数转换为对象引用
  • 对象域访问是合法的
  • 解释(Interpreter),JIT(Just In Time Java即时编译)

机器(计算机)也不能认识class文件(JVM认识class文件),还需要被解释器进行解释,或者通过即时编译为本地机器码,机器才能最终理解我们要表达的东西。(Java理论上慢的原因,解释性语言,要在Runtime时进行解释才能被机器识别)
这里写图片描述

java的三大特性

a),虚拟机Java Virtual Machine相当于一个运行平台,约相当于JRE
是什么?真实机器中软件模拟实现的一种想象的机器,为不同的硬件平台提供一种编译java代码的技术规范,改规范使java软件独立于平台,因为编译时相当于虚拟机这样的一般机器。
有什么?Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。通过对中央处理器(CPU)所执行的软件实作,实现能执行编译过的Java程序码(Applet与应用程序)。
作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件符合JVM对载入编译文件格式要求,任何语言都可以由JVM编译运行。
能干什么?
1) 通过ClassLoader寻找和装载class文件
2) 解释字节码成为指令并执行,提供class文件的运行环境
3) 进行运行期间的垃圾回收
4) 提供与硬件交互的平台,由虚拟机屏蔽软硬件的不同
b),垃圾回收
什么是垃圾?程序运行过程中,存在分配了但是不再被需要的情况,那么这些内存对于程序来讲就是垃圾。
什么是垃圾回收?对不在需要的已分配的内存取消分配,也就是释放内存。
java的垃圾回收?在其他语言中,取消分配是程序员的责任。java中提供一种系统级线程跟踪内存分配,从而可以自动检查和释放不在需要的内存。
什么是内存泄露?程序运行期间所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃。
几点提示:1,java里面垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。比如垃圾回收什么时候开始,什么时候结束,还有到底哪些资源需要回收,都是程序员不能控制的。2,有一些垃圾回收相关的方法,比如System.gc();记住一点,调用这些方法仅仅在通知垃圾回收程序,至于垃圾回收程序允不允许,什么时候运行时无法控制的。3,程序员可以通过设置对象为null来标志某个对象不再需要了,这只是表示这个对象可以被回收,并不表示马上被回收。
c),代码安全
1),编译期间加粗,部分问题编译期间会被发现,无法通过。
2),通过编译后,在类加载时,还会进行类加载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。
3),类加载后,在运行前,还会进行字节码校验,来判断你的程序时安全的。
4),如果你的程序在网络运行,还有沙箱(Sand Box)的保护。

沙箱就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行时不能够访问本地资源的,从而保证安全性。

数据类型

数据类型:8种基本类型,4种整型,2种浮点型,1种表示Unicode编码的字符单元的字符型,1种表示真值的布尔型
整型:int(4字节),short(2字节),long(8字节),byte(1字节)(Java的整型范围与运行java代码的机器无关,这和c/c++不一样,不会因为32位机器和64位机器而导致字节的长度不同)

  • tip1
    长整型有一个后缀L,十六进制前缀0x,八进制前缀0,java7开始前缀0b可以写二进制数,还可以再数字前面加下划线如1_000_000表示100万。
  • tip2
    浮点型,float数值有一个后缀F,没有后缀的默认为double类型。也可以用后缀D表示double类型。3个特殊的浮点数,正穷(Double.POSITIVE_INFINITY),负无穷(Double.NEGATIVE_INFINITY),非数字(Double.NaN)。
  • tip3
    强烈建议不要再程序中使用char类型

字符串

  • 空串和Null串
  • 判断是否为空:
    if(str.length==0)(可能会产生异常,如果str=null) 或 if(“”.equals(str))
  • 判断是否为null:
    if(str==null)
  • 判断既不为空也不为null:
  • if(str!=null && str.length!=0)

输入输出

  • 标准输出:System.out
  • 标准输入:Scanner in
Scanner in = new Scanner(System.in);
System.out.println("What is your name?");
String name = in.nextLine(); //输入一行
String firstname = in.next();//读取一个单词以空白符分隔

System.out.println("How old are you?");
int age = in.nextInt();//读取一个光整数

数组

  • 数组是什么?有什么用?怎样使用?
    数组是一种数据结构,用来存储同一类型值的集合。通过整型下标可以访问数组中的每一个值。
    一旦创建了数组就不能再改变它的大小,如果要经常扩容的话就需要使用数组列表ArrayList

  • 循环的2种方式

for(int element:a)
for(int i=0;i<a.length;i++)
  • 数组初始化及匿名数组
int a[] = new int[2];    //默认为0,如果是引用数据类型就为null,boolean类型就为false
int b[] = new int[] {1,2,3,4,5};    
int c[] = {1,2,3,4,5};
  • 匿名数组:new int[] {1,2,3,4};

  • 数组分析(thinking in java)
    有两方面的问题将数组与其他集合类型区分开来:效率和类型。对于Java 来说,为保存和访问一系列对象
    (实际是对象的句柄)数组,最有效的方法莫过于数组。数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们却要为这种速度付出代价:创建一个数组对象时,它的大小是固定的,而且不可在那个数组对象的“存在时间”内发生改变。

  • 数组拷贝:Arrays.copyOf();可以用于数组扩容

  • 数组排序:Arrays.sort()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值