1、java简单的基础知识

来源:互联网 发布:阿里云华南1是哪里 编辑:程序博客网 时间:2024/06/05 03:49

1、jdk和jre

  1. jdk:java开发环境,包含jre;
  2. jre:java运行环境;
  3. java:运行;javac:编译

2、final

  • final 修饰的变量不能被赋值第二次,即常量;
  • final修饰的方法代表这个方法不可以被子类的方法重写;
  • final类通常功能是完整的,它们不能被继承。
  • 详细参考:http://www.importnew.com/7553.html

3、String的不变性

  1. String为什么是不可变的:http://www.importnew.com/7440.html

4、数值类型

数值类型6种:

  • byte(8bit) —-128-127
  • short(16bit)
  • int(32bit)
  • long(64bit)
  • float(32bit)
  • double(64bit)

5、++运算符

  1. a = 10;num = 10*++a; 结果是110

6、数值转换

  • 扩宽不需要强转,收窄需要强转。
  • 理解就是小的转大的不会丢失精度,所以可以直接转;但是大的转小的,存在精度丢失问题,必须要声明一下。

7、double

  1. double t = 1/2; 结果为0.
  2. double t = (double)1/2;结果为0.5

8、boolean

  • 布尔类型占用空间是不确定的,不同虚拟机是不一样的。

9、&和&&

  • 都可以实现与的功能,但是后者有短路功能,效率高一点。

10、数学运算

  1. ceil(向上取整)
  2. floor(向下取整)
  3. round(四舍五入,中间取大的值)
  4. rint(取离得近的,中间的话取偶数)
  5. Math.random()(0-1之间取值)

11、字符类型

  • char(16bit)、String
  • subString(1,4) 截取,取头不取尾
  • compare(a,b) 相等为0;a>b取正数;a

12、重载

  1. 方法名相同,只是参数列表不一样(参数个数和类型)

13、==、equals()

  • 基本类型8种:byte、int、short、long、char、float、double、boolean,==就是直接比较数值;因为只有==,没有equals(),为什么没有呢?因为他不是对象,没有函数和方法这一说。
  • 对于引用型变量,==是比较地址,而equlas才是比较内容(需要重写,否则默认还是==),所以String、Date、Integer等已经重写过了,可以直接用。Stirng比较特殊,有个池的概念。

14、一维数组

  1. int[] array = new int[5]; 引用传递

15、不定参数

  • int[] array ; int… array

16、值传递和引用传递

https://www.zhihu.com/question/31203609


16、查找与排序

简单的线性查找,就是遍历数组。

public static int linearFind(int[] array,int target){    for(int i=0; i<array.length; i++){        if(array[i]==target)            return array[i];    }    return -1;}

二分查找法:
先排序:选择排序(从第一个开始,将后面所有的元素与第一个比较,最小的放在最前面)

public static void selectSort(int[] array){    for(int i=0; i<array.length; i++){        for(int j=i+1;j<array.length; j++){            if(array[i]>array[j]){                int var = 0;                var = array[j];                array[j] = array[i];                array[i] = var;            }        }    }}

冒泡排序:从最后开始,两两比较,最后将最大的放在最后面:

public static void bubleSort(int[] array){    for(int i=array.length-1; i>0; i--){        for(int j=0; j<i; j++){            if(array[j+1]<array[j]){                int temp = 0;                temp = array[j];                array[j] = array[j+1];                array[j+1] = temp;            }        }    }}

最后二分查找:

public static int binary(int[] array,int target){    int low = 0;    int high = array.length-1;    int binaryIndex = 0;    while (high>=low){        binaryIndex = (low+high)/2;        if(target>array[binaryIndex]){            low = binaryIndex+1;        }else if(target == array[binaryIndex]){            return binaryIndex;        }else {            high = binaryIndex-1;        }    }    return -1;}

17、静态

静态域不能访问非静态域:由于静态的成员属于类级别,在程序编译期就会存在了,而非静态的成员,往往是在实例化对象后才存在,所以一个肯定存在的东西怎么能去访问不一定存在的东西呢?
静态变量是各个对象共享的。


18、普通代码块、构造代码块、构造器、静态代码块的执行顺序:

  • 在main方法中,普通代码块按顺序之心。
  • 在类中,静态代码块(只执行一遍)>构造代码块>构造器(后两者,new多少次就运行多少遍)

19、StringBuilder、StringBuffer

  • StringBuilder:线程不安全、效率高
  • StringBuffer:线程安全、效率低

20、构造方法链

儿子–》爸爸–》爷爷
爷爷构造器–爸爸构造器(有参>无参)—儿子构造器


21、try catch finally执行顺序

http://blog.csdn.net/kavensu/article/details/8067850
http://www.blogjava.net/fancydeepin/archive/2012/07/08/java_try-catch-finally.html


22、递归

阶乘:

public static Long factorial(int i){    if(i == 0){        return 1L;    }else {        return i*factorial(i-1);    }}

斐波拉契

public static long fib(int index){    if(index == 0){        return 0;    }else if (index == 1){        return 1;    }else {        return fib(index-1)+fib(index-2);    }}

23、集合

数组不能扩容,所以提出ArrayList,也是数组,查找的效率比较高,但是删除、插入操作效率低,并且由于数组是一大块连续存储的空间,一旦空间不够,需要额外操作,比如挪地方,所以存在潜在的效率问题。
LinkedList:链表,非连续,插入和删除操作效率比较高,因为只要改变指针的指向就可以实现,并且由于非连续,解决了扩容存在的潜在问题,但是链表的查找效率比较低。

HashSet:无序,不允许重复,根据hashCode和equals方式判断是否相同。底层就是hashMap.
TreeSet:有序,不允许重复,底层是红黑树结构,他去重的方式是:针对简单类型的String:字典顺序进行比较,即一个字母一个字母地比较;数字类型就直接比较大小;对于复杂类型的对象,需要用comparator比较器进行自定义的比较。常用的方式有两种,第一种是实现Comparable接口中的compareTo()方法。第二种是自定义比较的类,实现comparator接口。查找、删除、插入等操作的效率都不错,是一种折中的方式,实现就是TreeMap.

以上都是单列集合,Map是双列集合。

HashMap键唯一,去重方式同HashSet;TreeMap键唯一,去重方式同TreeSet.
map便利元素的两种方式。
第一种:
Set set = map.keySet();先取出key,然后用增强for循环再取出value.
第二种:

Set<Map.Entry<String,String>> entries = map.entrySet();//这样获取到键值对,再用增强for循环取出来:for(Entry<String,String> entry:entries){entry.getKey();entry.getValue();}

要想使用增强for循环进行便利,必须要满足其类或父类已经继承了Iterable类才可以使用。

参考1:http://www.cnblogs.com/wqing7/p/5896028.html
参考2:http://www.importnew.com/13801.html


24、迭代器

比如遍历set,除了直接可以用增强for循环遍历外,还可以:

Interator<User> it = set.iterator();while(it.hasNext()){it.next();}
原创粉丝点击