• 【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)
  • 相关阅读:
    常用端口号
    linux java 和jmeter 环境变量配置文件笔记(原)
    部署个人wordpress 笔记
    locust安装及其简单使用----基于python的性能测试工具
    JMeter配置好环境变量后无法启动---翻车笔记
    Jmeter常见问题(转)
    机器学习环境配置系列三之Anaconda
    机器学习环境配置系列二之cuDNN
    机器学习环境配置系列一之CUDA
    准确率、精确轨、召回率等
  • 原文地址:https://www.cnblogs.com/lcw/p/3202196.html
Copyright © 2020-2023  润新知