Java基础常识

来源:互联网 发布:淘宝查快递怎么查询 编辑:程序博客网 时间:2024/04/26 13:03
  1. 关于Java的跨平台性:
    1.1 JVM是不跨平台的,不同的操作系统有不同的JVM。JVM调用操作系统底层指令解析,执行Java程序。
    1.2 用C++语言编写的程序在Windows系统中可以运行,在Linux系统中则不可以。因为Windows系统是由C和C++语言编写的,Windows系统内置了C和C++的解析器。而Java语言编写的程序要在Windows,Linux,Mac系统中运行,则要安装一套能够解析,执行Java程序的软件,即JVM(Java虚拟机),不同系统的JVM不一样。如此就实现了”一次编译,到处运行”的跨平台性。
    1.3 JVM的作用就是搭建了Java语言编写的程序和操作系统之间的桥梁。
  2. JRE: Java Runtime Environment——>Java 运行环境
    JRE包括Java虚拟机(Java Virtual Machine)和Java程序所需的核心类库等。(如果需要运行一个开发好的Java程序,计算机中只需要安装JRE即可)
  3. JDK: Java Development Kit——>Java 开发工具包
    JDK包含了Java的开发工具,也包含了JRE。开发工具有javac.exe,jar.exe等。(使用JDK开发的程序交给JRE去运行,没有JRE,javac.exe是运行不了的)
  4. JDK安装的时候,路径中不要出现中文或者特殊符号,如空格等,否则后期开发可能出现一些莫名其妙的错误。
  5. 常见DOS命令:
    dir——>列出当前目录下所有文件及文件夹;md——>创建目录;rd——>删除目录;cd——>进入指定目录;cd ..——>退回到上一级目录;cd \——>退回到根目录;del——>删除文件;exit——>退出DOS命令行。
  6. %JAVA_HOME%表示动态获取名称为JAVA_HOME环境变量的值。
  7. 注意:
    .java文件的源文件与类名可以不一致,但当class前有public修饰时,则必须一致。
  8. javac编译过后产生的.class文件是字节码文件,也就是可以执行的Java程序。
  9. main方法的作用在于保证一个类可以独立运行,因为它是程序入口。
  10. javac负责编译,对Java程序检查是否有语法错误;java则负责启动JVM,找到相应的.class文件,在寻找程序入口,然后调用该方法执行Java程序。
  11. 环境变量classpath的作用:如果没有配置这个环境变量,JVM只在当前目录下查找要运行的类,如果配置了classpath,JVM会先在classpath环境变量值的目录中查找要运行的类。
  12. classpath的设置,在一定情况下容易引起思维混乱,建议不设置。(后期的eclipse中开发工程不会涉及到这个,故不做考虑)
  13. 标识符命名规则:
    13.1 由26个英文字符,数字,_,$组成;

    13.2 数字不开头,不可用关键字;
    13.3 严格区分大小写,起名尽量要有意义;

    13.4公司中经常会通过“_”代表某一类名称,如:_temp;通过 TrafficLampRed。
    13.5 包名:多组单词组成时,所有字母小写;
    13.6 类名 接口:多组单词组成时,各单词首字母大写;
    13.7 变量名 函数名:多单词组成时,第一个单词的首字母小写,之后每个单词首字母大写;
    13.8 常量名:所有字母都大写,多单词时每个单词用下划线连接。

  14. /*文档注释/
  15. 编译生成的.class文件不包含注释部分。
  16. 文档注释可被javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
  17. 先写注释,在写代码,即先将自己的思想用注释整理出来,再用代码去实现,因为代码只是思想的一种体现形式。
  18. 通过注释掉某些代码来去除错误出现,用以寻找到错误出现的地方。(个人觉得这种方法是破坏逻辑的,不合理的)
  19. Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型。
  20. Java语言定义了八种基本数据类型(byte,short,int,long,float,double,char,boolean),三种引用类型(类class,接口interface,数组[])。
  21. long型变量必须在赋值时最后添加L/l,大小写不限,否则会默认为int类型,产生编译错误。
package heima.person.caizhanqi.basetest;public class BaseJavaTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        long longNumber = 123456789987654L;        System.out.println(longNumber);    }}

.
22. 21原理:整数默认为int类型,小数默认为double类型。所以在取float类型时要加F/f。
23. 变量必须先初始化,赋值。
24. 字符类型数据能够自动的转换为int类型的。字符类型在计算机中也是用0、1表示,int数据类型在计算机中也是用0、1表示,所以char类型数据可以自动转换为int数据类型。但是字符数据在计算机中使用的0、1是按照何种顺序组合排列的则需要依据某个码表而定。Java中的内置码表是Unicode。
25. byte,short,char——>int——>float——>double。自动转换阶级
26. 如下第三行报错,对于byte的报错是由于编译器是一行一行编译的,并不知道a与b的值,两个byte类型的变量相加,首先会被提升为int,和也是int,其值可能超过byte所表示的范围,所以报错,而byte d = 3+7;不会报错是由于编译器知道结果为10,在表达范围内,自动进行了强转,所以不会出错。

byte a = 3;        byte b = 4;       byte c = a+b;

.
27. 正负不一进行取模运算时看第一个前一个正负,结果与其符号。

System.out.println(-8%3);System.out.println(7%-3);

.
28. int a = 0; a = a++; 最后结果a=0;是因为a被先放在某个临时开辟的内存空间中,而进行的加一操作结果返回给原变量,之后a再取到临时空间中的值,所以a等于原值0。
29. 以下示例中,a += 2;这一句自动进行强制类型转换。

        short a = 1;        a += 2;        System.out.println(a);

.
30. 以下示例中,b = b+2;2为int类型,此处不知道结果是否超出,未进行强制类型转换,所以报错。

        short b = 2;        b = b + 2;        System.out.println(b);

.
31. 逻辑运算符:&与 |或 !非 ^异或 &&短路与 ||短路或
32. &&与&的运算结果是一样的,但是运算过程有点区别,&无论左边正确与否,右边都会参与运算,&&如果左边错误,右边不继续运算。&&比&提高了效率。||与|同具此理。
33. 位运算规则:~取反。
位运算符
34. System.out.println(”高效率计算,2乘以8等于多少:”+2<<3);
35. 可以利用与,或,非,异或进行加密解密操作。
36. 不借用第三变量交换两个变量的值。int a = 1;int b = 2;a = a^b;b = a^b;a=a^b;如上经过多次异或即可得到交换后的值。(这个想法好神奇)
37. 三元运算比较得出三个值中的最大值
temp = x>y?x:y;max=temp>z?temp:z;
38. for(;;);特别注意最后只是加了一个分号的空执行体循环,这是特大坑。
39. switch语句选择的类型只有四种,byte,short,int,char。
40. 如下示例:
40.1 default选择的位置不影响程序运行结果;
40.2 当它放在首位的时候,如果没有写入break,则会顺序执行之后的case,直到遇到第一个break后截止;
40.3 最后一个case或者default可以不写break,但不推荐这样做。

    int x = 3;    switch (x) {        default:            System.out.println("default");            break;        case 0:            System.out.println(0);            break;        case 1:            System.out.println(1);            break;        case 2:            System.out.println(2);            break;    }

.
41. “\t”——>制表符 ”\n”——>回车 “\r”——> 回车符“\b”——>退格
42. Windows系统中的回车换行是由两个字符组成的”\r\n”;Linux则是由一个字符形成:”\n”。
43. 打印”Hello HeiMa”——>System.out.println(“ \”Hello HeiMa\” ”);打印”\Hello HeiMa\”——>System.out.println(“ \Hello HeiMa\ ”);
44. 对于没有返回值的函数,函数的最后可以不返回或者使用return;。
45. 函数重载:在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或参数类型不同即可。重载有利于阅读,理解。在调用函数的时候,虚拟机通过参数列表的不同来区分同名函数。
46. 重载与返回值无关,只看参数列表;Java是严谨性语言,如果出现所给参数与调用函数不符合,则会出现错误,提示没有对应给出的参数列表的函数。
47. 基本数据类型的数组在定义并给出个数但是没有初始化每一个数值时,不同的类型是由不同的默认值的,char[]数组的每个元素默认值是’\u0000’,空,不是null,但基本数据类型本身在单独定义使用的时候,必须先初始化。
48. 栈内存:用于存储局部变量,当变量所属的作用域一旦结束,所占空间会自动释放。
49. 堆内存:数组和对象,通过new建立的对象都存放在堆内存中。
50. 如果将数组的应用设置为null,实体不在被引用,那么Java垃圾回收器会在不确定的时间内将无用的实体回收。
51. [I@2a139a55 ——>[I表示int型数组,@后面的表示数组的初始地址的哈希值。
52. 选择排序:每次选择剩下元素中的最大值,将其从第一位开始进行交换,最后就得到从大到小的数组。
53. 冒泡排序:从最后一位数开始依次与前一位数进行比较,如果后一位大于前一位则进行交换,比较次数递减1,最后就得到从大到小的数组了。代码如下:

package heima.person.caizhanqi.basetest;public class BaseJavaTest {    public static void bubbleSort(int[] arr) {        for (int i = 0; i < arr.length - 1; i++) {            for (int j = arr.length - 1; j > i; j--) {                if (arr[j] > arr[j - 1]) {                    arr[j] = arr[j] ^ arr[j - 1];                    arr[j - 1] = arr[j] ^ arr[j - 1];                    arr[j] = arr[j] ^ arr[j - 1];                }            }        }    }    public static void printSort(int[] arr) {        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }    public static void main(String[] args) {        int[] arr = new int[]{1,2,3,10,11,52,5,6,7,8,9};        BaseJavaTest.bubbleSort(arr);        BaseJavaTest.printSort(arr);    }}

.
54. 对于无序查找,可以进行遍历查找得到角标,而对于有序数组则可以进行二分查找。二分查找的思路:用min,max,num分别记录当前比较到的数组边界的最小角标,最大角标,以及当前比较的值的角标。每次比较给定值与num角标对应数的大小,如果小于当前num角标对应的值,就令max=num;num=(min+max)/2;继续下一步;如果大于当前num角标对应的值,则令min=num;num=(min+max)/2;继续下一步;相等时返回对应角标,否则返回-1。未找打情况下返回-1是一种默认的规则。

0 0
原创粉丝点击