快捷键
- ctrl+s >>>>>>>>>>>>>>>>>>>>>>>保存
- ctrl+/ >>>>>>>>>>>>>>>>>>>>>>>多行注释
- ctrl+z >>>>>>>>>>>>>>>>>>>>>>>撤销
- ctrl+点击 >>>>>>>>>>>>>>>>>>>>点击要看的类
- ctrl+shift+f >>>>>>>>>>>>>>>>>>>自动排版
- ctrl+o >>>>>>>>>>>>>>>>>>>>>>>看有些类
- Ctrl+Shift+O >>>>>>>>>>>>>>>>>>快速生成import
- ctrl +f >>>>>>>>>>>>>>>>>>>>>>> 查找、替换
- F11>>>>>>>>>>>>>>>>>>>>>>>>> 调试程序
- Ctrl+F1>>>>>>>>>>>>>>>>>>>>>>运行程
- Alt+/ >>>>>>>>>>>>>>>>>>>>>>>>代码助手完成一些代码的插入
- Ctrl+Shift+P >>>>>>>>>>>>>>>>>>定位到对于的匹配符(譬如{})
小知识
- 注释方法有三种
a. //
b. /****** 回车
c. /*** 回车 - 配置classpath:
a. java程序去classpath的目录中去寻找类
b. java -classpath=c:\code Hello
c. echo %path% set classpath=%classpath%;c:\code - 类名与文件名的关系
类名和文件名可以不同,编译出来的class文件的名字是类的名子 但如果类是public的,则类名必须和文件名相同,否则不能编译 一个文件可以包含多个类,但是只能有一个是public的类 - java 命名规范(驼峰命名法)
a. 多个单词直接连接在一起,中间不用下划线或者横杠等
b. 类名每个但单词首字母大写
c. 变量名和方法名第一个字母小写,其他单词大写
d. 尽量让名字直观易懂 - 如何保留需要的小数位
DecimalFormat df=newDecimalFormat("#.00");
/***** #表示 一个数字,不包括 0;
*** 0表示如果没有则用0代替;保留几位就填几个0;
*/
df.format(22.444); - 改eclipse字体
在Windows/preferences中General/Appearance/Colors and Font/Basic/text Font中的Edit;)
基本类型
八大基本类型(x(字节)*8bit) byte(字节)、short(2)、int(4)、long(8)、float(单精度 4)、double(多精度 8)、char(2)、boolean
{String不是基本类型 String是一个类}
包装类 (首字母大写)
下面两个例外:
Integer a=1;
Character c='a';
基本类型与包装类型的不同:
- 在Java中,一切皆对象,但八大基本类型却不是对象
- 声明方式的不同,基本类型无需通过new关键字来创建,而封装类型需new关键字。
- 存储方式及位置的不同,基本类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中。
- 初始值的不同,封装类型的初始值为null,基本类型的的初始值视具体的类型而定,比如int类型的初始值为0,boolean类型为false;
- 使用方式的不同,比如与集合类合作使用时只能使用包装类型。
- 包装类是final 不会被改变
Integer d=10;
d=d++;//d的值仍然会是10
java 关键词
关键字包括abstract boolean break byte case catch char class continue default do double else extends false final finally float for if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient try true void volatile while
1、abstract修饰词,修饰的类是抽象类,可以包含抽象方法也可以有实例方法,但抽象方法只能存在于抽象类中,抽象方法没有方法体。
2、boolean基本数据类型,逻辑类型(取值false 和true null).
3、break返回语句常和switch语句等循环语句搭配使用
4、byte基本数据类型字节型
5、int(基本数据类型整型-232~232-1,在内存在占4个字节32位)short(短整型,占2个字节16位)long(长整型,在内存占8字节),编程系统默认数据是int类型。
6、char字符类型,在内存中占2字符。
7、float(占4个字节,后面以F结尾)和double(占8字节,后面以D结尾)类型是浮点型。
8、case常与switch搭配使用
9、class用来声明一个类。
标识符规则(不能用关键字)
- 第一个字符必须是字母或者_或者$
- 后面的字符可以是任何字符或者数字
- 表示符大小写敏感;(name Name 是不同的)
常量与变量
- 常量(不能改变)
例: final int a; a只能给它一次赋值 - 变量(只能定义在方法里面)
a. 属性(全局)变量;类除了方法还有属性
b. 局部变量;在方法中定义的出了方法就不存在了 - 变量的作用域
a. 全局变量和方法里的变量(局部变量)是可以重名的,但是先用方法中的(局部变量)
b. 方法中的变量不能冲突;除非在相互独立的方法中
c.局部变量只在方法中有效而全局变量类中有效 - 静态常量与动态常量
静态常量可以通过 类名.+常量名直接使用而不是静态的需要先new一个对象在使用
语句
- for语句;
例子表示:
1到100;如果是40的倍数这该数字以后不打印;如果是五的倍数则该数字不打印
for(int i = 1; i<101; i++)
{
if(i == 5)
{
continue;
}
System.out.println(i);
if(i%40 == 0)
{
break;
}
}
- if语句
if(i==1){
...;
}
else if(i==2){
...;
}
else
...;
- while语句
while(true)
{
....;
}
do
{
...;
}while(true);
a. while()先判断再执行
b. do{ }while(); 先执行再判断;
- switch 语句
//case只支持int byte short char String(Enum);
public static void learnswitch(int a){
switch(a)
{
case 条件1: ........;break;
case 条件2: ........;break;
.....;
可以写 default : .......;break;//上述case以外的所有
}
String 方法
- .length(); //求字符串长度
- .charAt((int index);//取出第index位的字符
- .codePointAt(int index);//得到第index个字符的码
- .isEmpty();//字符是否为空;
- .equalsIgnoreCase();//忽略大小写;
- .startsWith("hel",int a);//从第a位开始,后面String的字符是否与hel相同;
- .hashCode(); //哈希数(可以通过判断两个字符串的哈希数,判断两个字符串是否相同)
- .replace(“a”,"b");//替换String中所有a变成b;可以换成字符或者字符串及" "换成' '
- String s2 = s2.replaceAll("[abd]+", "s");//替换s2中所有a b d字母换成s;(replaceAll支持正则表达式而replace不支持)
- .replaceFirst() //换第一个
- .Trim() //函数移除字符串两侧的空白字符或其他预定义字符
- .ltrim()//移除字符串左侧的空白字符或其他预定义字符。
- .rtrim()//移除字符串右侧的空白字符或其他预定义字符。
- .indexOf() //查找 如果没有返回-1否则返回所在位置
- s1.indexOf("o", 6);//查找s1中的o从第6个开始;
- .startsWith()和.endsWith() //判断开头和结尾返回boolean类型
数组
定义:固定长度,相同类型的元素的集合;
- 一维数组 nums[i]:
a. int[] nums = {3,4,2,2};
b. int[] nums = new int[4];{可写作int[] nums; nums=new int[4];}
c. int[] nums =new int[]{3,2,1,4};与第一个区别在于new int[] {..}可以直接return; - 二维数组 nums[i][j];
a. int[][] nums={{2,3,4},{3,2},{32,5}};//基本和一维一样
b. int[][] nums=new int[][]{{2,3,4},{3,2},{32,5}};
c. int[][] nums=new int[3][]; - for each 循环
for(int b:a)
System.out.println(b);打印数组a中的所有元素; - 数组排序 : Arrays.sort(a);
- 二维数组的数组长度
a. nums.length为有多少行
b. nums[i].length为有多少列
6.数组打印方式
System.out.println(a); 结果 [Ljava.util.Date;@2a139a55(地址)
System.out.printlen(a[0]) 结果 打印出数组a中第0位的元素 - 动态数组
ArrayList<类名> a= new ArrayList<>();可以创建一个长度不固定的类的数组;(动态数组)
a.size()得出长度;
常见异常
- ArrayIndexOutOfBoundsException >>>>> 数组下标越界
- java.lang.StackOverflowError >>>>> 堆栈溢出;死循环
常用类
- import 从别的包引用的类
- Scanner类(用于扫描输入文本)
Scanner sc = new Scanner(System.in);得到用户输入 - DecimalFormat类(格式化)
DecimalFormat df=newDecimalFormat("#.0");
df.format(22.444);// 保留一位小数 - 与 String 相关的类
StringBuffer是线程安全的(防止多个线程访问String)
StringBuilder不是线程安全的
SrtingBuffer 要考虑拼接前有没有其他在用 而StringBuilder不考虑直接使用
使用+号需要创建一个新的字符串占用内存多,效率低
concat底层用的stringbuilder - Calendar 类(日历)
Calendar key = Calendar.getInstance();创建日历; - Date类 (日期)
Date a = new Date();//得到当前日期
算法
- 冒泡排序算法(从后往前)
a. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
b. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
c. 针对所有的元素重复以上的步骤,除了最后一个。
d. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 - 二分查找法
- 递归算法
退出条件:if(...){return ....};
通用公式:return ......;
a.斐波那契序列{f(n)=f(n-1)*f(n-2);}