1、java简单的基础知识
来源:互联网 发布:阿里云华南1是哪里 编辑:程序博客网 时间:2024/06/05 03:49
1、jdk和jre
- jdk:java开发环境,包含jre;
- jre:java运行环境;
- java:运行;javac:编译
2、final
- final 修饰的变量不能被赋值第二次,即常量;
- final修饰的方法代表这个方法不可以被子类的方法重写;
- final类通常功能是完整的,它们不能被继承。
- 详细参考:http://www.importnew.com/7553.html
3、String的不变性
- String为什么是不可变的:http://www.importnew.com/7440.html
4、数值类型
数值类型6种:
- byte(8bit) —-128-127
- short(16bit)
- int(32bit)
- long(64bit)
- float(32bit)
- double(64bit)
5、++运算符
- a = 10;num = 10*++a; 结果是110
6、数值转换
- 扩宽不需要强转,收窄需要强转。
- 理解就是小的转大的不会丢失精度,所以可以直接转;但是大的转小的,存在精度丢失问题,必须要声明一下。
7、double
- double t = 1/2; 结果为0.
- double t = (double)1/2;结果为0.5
8、boolean
- 布尔类型占用空间是不确定的,不同虚拟机是不一样的。
9、&和&&
- 都可以实现与的功能,但是后者有短路功能,效率高一点。
10、数学运算
- ceil(向上取整)
- floor(向下取整)
- round(四舍五入,中间取大的值)
- rint(取离得近的,中间的话取偶数)
- Math.random()(0-1之间取值)
11、字符类型
- char(16bit)、String
- subString(1,4) 截取,取头不取尾
- compare(a,b) 相等为0;a>b取正数;a
12、重载
- 方法名相同,只是参数列表不一样(参数个数和类型)
13、==、equals()
- 基本类型8种:byte、int、short、long、char、float、double、boolean,==就是直接比较数值;因为只有==,没有equals(),为什么没有呢?因为他不是对象,没有函数和方法这一说。
- 对于引用型变量,==是比较地址,而equlas才是比较内容(需要重写,否则默认还是==),所以String、Date、Integer等已经重写过了,可以直接用。Stirng比较特殊,有个池的概念。
14、一维数组
- 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();}
- 1、java简单的基础知识
- java中一些简单的基础知识,温故而知新
- 一些简单的java基础知识复习。
- iOS 简单的基础知识(1)
- Java的基础知识1
- java基础知识简单介绍
- 简单的网络基础知识
- java的基础知识(1)
- java的基础知识回顾---1
- java基础知识的认识(1)
- 【Java基础知识】IO流--RandomAccessFile类的简单使用
- java基础知识(常用的简单面试题)
- java基础知识IO简单介绍
- java基础知识简单算法题目
- 我的Java基础知识总结1
- Java的一些基础知识
- JAVA软件工程师的基础知识
- 一些java的基础知识
- 正则之awk
- 内存管理 原子性 可见性 有序性
- Bash的别名 与 常用快捷键
- AWS ES2搭建Shadowsocks+开启Google TCP BBR加速 超详细教程!
- 【福利】成为专业程序员路上用到的各种优秀资料、神器及框架
- 1、java简单的基础知识
- 【Scikit-Learn 中文文档】支持向量机
- LeetCode——House Robber
- 深入理解LayoutInflater.inflate()
- 笔记:udacity计算机导论
- Android Studio学习1
- 适配器模式
- SpringBoot集成MyBatis
- Windows搭建Git服务器(gitblit)