zoukankan      html  css  js  c++  java
  • 【Java】Java复习笔记-第一部分

    配置java环境变量

    • JAVA_HOME:配置JDK的目录
    • CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)
    • PATH:指定可执行程序的位置

    LINUX系统

      (在" .bash_profile "下的环境变量设置)

    JAVA_HOME=/opt/jdk1.5.0_06
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    PATH=$PATH:$JAVA_HOME/bin:.
    export JAVA_HOME CLASSPATH PATH
    View Code

      将指定的环境变量声明为全局的

    windows系统

      右击我的电脑-->属性-->高级-->环境变量


    Java的运行过程

    • 编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台
    • 解释:解释器把源文件逐行解释,跨平台但效率不高


      在java中:先编译后解释,把.java文件编译成.class字节码文件

    • Java源代码文件(.java文件)--->
    • Java编译器(javac)--->
    • Java字节码文件(.class文件,平台无关的)--->
    • Java解释器(java),执行Java字节码

    Java的垃圾回收

      由一个后台线程gc进行垃圾回收
      虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收

    • 缺点:不能够精确的去回收内存

      java.lang.System.gc(); 建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收

    • 内存中什么算是垃圾:不在被引用的对象(局部变量,没有指针指向的)

    java的安全性

    • 沙箱机制:只能做沙箱允许的操作

      通过下面环节,实现安全

    1. 加载有用的类文件,不需要的不加载
    2. 校验字节码,查看允许的操作
    3. 查看代码和虚拟机的特性是否相符
    4. 查看代码是否有破坏性
    5. 查看是否有违规操作,如越界
    6. 查看类型是否匹配,类型转换是否能正确执行

    源程序

    package mypack;     //相当于一个目录
    
    public class HelloWorld
    {
        public static void main(String[] args)
        {
            System.out.println(“Hello World”); 
        }
    }
    View Code

    注:
    1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。
    2、一个.java文件中可以有多个class,但是只有一个public修饰的类。
    3、java源代码文件编译后,一个类对应生成一个.class文件
    4、一个java应用程序应该包含一个main()方法,而且其签名是固定的,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类

    编译

    javac -d . HelloWorld.java

      含有包的类,在编译的时候最好用上面的格式,-d指的是让该类生成的时候按照包结构去生成," . "指的是在当前路径下生成

      如果不用上面的格式,也可以用javac HelloWorld.java,但是需要注意的是包结构就要由自己去建立,然后将生成的.class文件放到该目录下

    执行

    java mypack.HelloWorld

       将字节码文件交给Java虚拟机去解释执行

      需要注意的事,必须使用包名.类名去解释执行


    包(package)

      把源文件放在目录下
      由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。

    • 包可以看作就是一个存放java源文件的目录。

      在源码中声明一个包名:package p;(只能放在第一行,且最多只能是一行)
      如果指定多层包,那么在包名之间我们可以用.作为分隔符:package p1.p2.p3.p4;

    用“javac HelloWorld.java –d 绝对路径”,编译后生成的字节码文件就会放在指定的包结构下

    •   执行该程序需要用" java 包名.类名 "
    •   引进包中的某个类:import 包名.类名;
    •   引进包中的所有类:import 包名.*;

    注释

    • // 单行注释, 到本行结束的所有字符会被编译器忽略
    • /* */ 多行注释, 在/* */之间的所有字符会被编译器忽略
    • /** */ 文档注释, java特有的,在/** */之间的所有字符会被编译器忽略

      可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包,类,属性,方法,构造器,引入之前的注释才可以进行抽取)


    标识符

    命名规则

    1. 由字母、数字、下划线、$组成,不能以数字开头
    2. 大小写敏感
    3. 不得使用java中的关键字和保留字

    关键字

    • 都是小写的

      jdk1.2多了strictfp(经准浮点型),关键字 jdk1.4多了assert(断言)关键字, jdk1.5多了enum(枚举) 关键字
      随着学习进度,会慢慢接触到的

    • true、false、null严格说不应该算关键字,应称其为保留字更合适

    习惯

    • 标识符要符合语义信息
    • 包名所有字母小写
    • 类名每个单词首字母大写,其它小写 //TarenaStudent
    • 变量和方法:第一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
    • 常量:所有字母大写,每个单词之间用" _ "连接

    基本数据类型:8种

    1) 整型

    1. byte 1B 8位 -128到127
    2. short 2B 16位 -2^15到(2^15)-1
    3. int 4B 32位 -2^31到(2^31)-1
    4. long 8B 64位 -2^63到(2^63)-1

    2) 浮点类型

    1. float 4B 32位
    2. double 8B 64位

    3) 字符类型

    1. char 2B 16位

    4) 布尔型 1B

    1. boolean false/true

    • Java中的自动类型提升问题。

    1)、正向过程:从低字节到高字节可以自动转换。
    byte->short->int->long->float->double
    2)、逆向过程:从高字节到低字节用强制类型转换。

      例:int a = (int)4.562;
      注:逆向转换将丢失精度。

    • boolean:只有true和false。
    • char:Java中用" u四位十六进制的数字 (即使在注释中出现u,后面如果跟的不是4个数字,也会报错)"表示将字符转换成对应的unicode编码,字符类型要用单引号括起来。
    • 黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
    • long类型有一个后缀,为" l " 或者" L "

    引用数据类型

    • 类、接口、数组

      引用类型 变量名 = new 引用类型名(参数); //new后面一般跟的都是类的构造器
      成员:写在类体括号里面的


    内存空间的分配

      内存分为:

    • 栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址
    • 堆:存放引用数据类型的实例

     局部变量

    • 不是声明在类体括号里面的变量
    • 必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值
    • 作用范围:定义开始到定义它的代码块结束
    • 同一范围内,不允许2个局部变量命名冲突
    • 参数传递时,简单类型进行值转递 (参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)

    自动类型提升

    byte a = 1;
    byte b = 2;
    a = a+b; //编译出错自动类型提升成int
    a += b; //自加没有自动类型提升问题

    类型自动提升规则

      a和b作某种运算

    • a和b中有double,结果就是double
    • a和b中有float,结果就是float
    • a和b中有long,结果就是long
    • 除此之外,结果都是int

      把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;


    移位运算符:效率最高

    • >> 有符号右移,补符号位

      移负数位,则将该数值加32后再进行移位
      数值的2进制是按照补码保存的

    • >>> 右移后高位都补0

    逻辑运算符

    • &/|也可以作为逻辑运算符
    • && 先判断前面一个条件,如果为假,则不用计算后一个条件
    • || 先判断前面一个条件,如果为真,则不用计算后一个条件

    " + "运算符

    • 两个操作的对象是数值时,是加法
    • 如果有一个是字符串时,则是字符串的连接

    流程控制语句

      同Core C++

    • switch中的变量类型只能是byte、 short、int、char四种类型 

    数组

      声明数组:
      数组能以下列形式声明:

    • 类型[] array;
    • 类型 array[];

      JAVA中推荐用:类型[] array;

    • 一个数组是一个对象
    • 声明一个数组没有创建一个对象
    • 声明时不用指定长度

    创建数组

    • 创建基本数据类型数组:int[] i = new int[2];
    • 创建引用数据类型数组:Student[] s = new Student[100];
    • 数组创建后其中的元素有初始值

      类型  黙认值

    byte 0
    short 0
    int 0
    long 0l
    float 0.0f
    double 0.0d
    char u0000
    boolean false
    reference tyeps null


     


      
     


    初始化数组

    • 创建时一定要指定长度
    int[] i2=new int[]; //error

      初始化数组: 

    • 声明、创建、初始化分开:
    int[] i; //定义数组
    i = new int[2]; //分配空间
    i[0] = 0; //初始化
    i[1] = 1; 
    • 声明、创建、初始化在同一时间 :
    int[] i = {0,1}; //显示初始化 {}中有几个值,则数组长度为几
    Student[] s = {new Student(),new Student()}; 

    int[] i=new int[]{1,2,3}; //后面[]中不可以写数值
    int[] i1=new int[3]{1,2,3}; //error

    二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)

    int[][] i1 = new int[2][3]; 
    int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
    int[][] i3 = new int[][3];     //不允许高维没分配空间而先给低维分配空间
    int[][] i2 = new int[2][]; 
    i2[0] = new int[2];
    i2[1] = new int[3]; 

    数组长度

    • 数组的属性length
    • 数组长度一旦确定,不可改变
    • int[] i = new int[5]; 则i.length= 5

    数组拷贝

      系统类System提供的

    static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
    • src: 源数组 
    • srcPos: 从源数组哪个位置开始拷贝(位置指的是元素的下标)
    • dest: 目标数组
    • destPos: 拷贝的元素放到目标数组的起始位置
    • length: 拷贝多少个

    数组排序

    1. 自己实现一个排序方法来进行排序
    2. 调用java.util.Arrays.sort(Object o)
  • 相关阅读:
    希腊字母写法
    The ASP.NET MVC request processing line
    lambda aggregation
    UVA 10763 Foreign Exchange
    UVA 10624 Super Number
    UVA 10041 Vito's Family
    UVA 10340 All in All
    UVA 10026 Shoemaker's Problem
    HDU 3683 Gomoku
    UVA 11210 Chinese Mahjong
  • 原文地址:https://www.cnblogs.com/lcw/p/3202196.html
Copyright © 2011-2022 走看看