• Java学习笔记


    1. 设置java运行环境

    1.Windows:

    设置环境变量,JAVA_HOME,CLASSPATH,PATH.成功后,在命令行中检验是否正确:

    image

    2.Linux:

    修改/etc/profile

    JAVA_HOME=/opt/jdk1.6.0_06
    CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
    PATH=$JAVA_HOME/bin:$PATH
    EXPORT JAVA_HOME CLASSPATH PATH

    2. eclipse

    eclipse是利用Java编写的,所以需要java运行环境。Windows下,如果安装jdk时选择安装 ”公共JRE”,则eclipse可以自动找到Java运行环境,否则需要在环境变量中配置jdk环境。

    3. 编译

    如下是一个HelloWorld.java中的代码:

    package com.gr.java;
    public class HelloWorld{
        public static void main(String[] args){
            System.out.println("Hello world");
        }
    }
    

    CMD下运行:

    javac –d . HelloWorld.java,这样会按照package组织目录,如下,在com/gr/java/目录中。如果编译时需要别人的jar,可以通过-classpath指定,javac -calsspath /home/gr/utility.jar –d . HelloWorld.java

    image

    如果直接输入javac HelloWorld.java, 这样会在与HelloWorld.java相同目录下生成一个HelloWorld.class,我们需要把生成的字节码文件放到我们自己组织的目录结构中,如下:

    image

    4. 打jar包

    jar包可以把.class文件打包压缩进行统一管理,打包命令如下:

    image

    会在当前目录下生成hello.jar,如下:

    image 

    将hello.jar加入CLASSPATH中,

    Windows:

    set CLASSPATH=%CLASSPATH%;CUSERSGRhello.jar;

    Linux:

    set CLASSPATH=$CLASSPATH:/home/gr/hello.jar

    这样,可以将.class文件打包成jar文件,执行java com.gr.java.HelloWorld即可。

    image

    在指定的jar包中查找.class文件执行:

    image 

    5. Java只允许一个文件中出现一个public类。

    6. Java中的包装类及其拆箱装箱

    基本类型的数据不是对象,要使用类的方法,必须装基本类型转换为对象。

    byte – Byte  short – Short  int – Integer  long - Long

    float - Float  double – Double

    char – Character

    bool – Boolean

    看如下代码:

    		Integer a = 100;
    		Integer b = 100;
    		Integer c = 200;
    		Integer d = 200;
    		log.info(a == b);
    		log.info(a == 100);
    		log.info(c == d);
    		log.info(c == 200);

    Integer对象之间使用==是比较引用的对象是否相同,而不是其值大小是否相等。>=、<=之间会对Integer进行拆箱处理,判断其值的大小。

    1、3是不同对象的比较应该为false, 2、4是值大小的比较应该为true,

    我们来看结果:

    image

    2、4会对a,c进行拆箱转换为基本数据类型比较,应该为true。

    1、3为对象的比较,1是true,3是false,出现了两种不同的结果。

    实际上,在定义a,b,c,d时,Integer a = 100;等于如下语句:

    Integer a = Integer.valueOf(100);

    我们来看看valueOf这个函数具体是怎样实现的。如下是jdk中的代码:

        public static Integer valueOf(int i) {
            if(i >= -128 && i <= IntegerCache.high)
                return IntegerCache.cache[i + 128];
            else
                return new Integer(i);
        }
        private static class IntegerCache {
            static final int high = 127;
            static final Integer cache[];
    
            static {
                final int low = -128;
                cache = new Integer[(high - low) + 1];
                int j = low;
                for(int k = 0; k < cache.length; k++)
                    cache[k] = new Integer(j++);
            }
    
            private IntegerCache() {}
        }
    

    从代码中我们可以看到,jdk为了加快速度,对-128到127之间的整型数据进行了缓存,这样,就导致了初始化的时候,a,b取得了对同一个对象的引用。所以进行比较的时候出现了相等的情况,如果不在这个范围,就没有了这种情况。这也进一步地证明,==是对引用的对象进行比较的。

    7. Java中a%b, b允许有小数,C语言中要求必须是整数。b为负数时,结果为正。a为负数时,结果为负。

    8. ++问题

    int a = 1;
    a = a++;
    System.out.println(a);

    输出结果为1,先执行a++表达式结果为1,之后a自增变为2,再将a++表达式的结果赋给a,所以a最终结果为1.

    9. equals()、hashCode()

    equals()方法一般用来比较对象的内容是否相等,一般需要覆盖。

    hashCode()值要稳定,一个对象创建以后值就不应再变化。两个对象equals比较为true时,应具有相同的hashCode()值。

    10. 当class中不写构造器时,javac会提供一个无参默认构造器,若提供构造器声明,javac将不再提供默认构造器。

    11. Java方法参数传递只有一种形式,基于值的传递,是变量值的传递。

    1. 基本类型就是值的复制

    2. 引用类型是引用值(地址)的复制。

    欢迎访问我的个人主页: www.forgerui.tk

  • 相关阅读:
    单片机基础
    EM310_AT收到的短信分析
    [原]改动CImage以实现以指定的质量保存Jpeg图像
    [原创]巧用DOS命令改子目录中的文件名
    二个月零七天,我女儿会翻身了
    [原]用正则得到HTML中所有的图片路径
    新文章:把程序放在相册中
    [原]用三行代码实现对音量的控制,实现增大,减小,静音
    BIOS中隐藏Telnet后门
    CoolChm 注册机的编写
  • 原文地址:https://www.cnblogs.com/gr-nick/p/3359011.html
Copyright © 2020-2023  润新知