进制表示
二进制0b
八进制0
十六进制0x
int w=10;
int w= 010;
int w=0x10;
浮点数:
float;double:不准确有限,离散,摄入误差,大约,接近但不等于
最好完全避免使用浮点数进行比较
银行等精确业务用 BigDecimal 类精确表示
char类型使用unicode编码,2字节 2的16次方,1个字节8个比特
u0000 到 uFFFF
char c3=’\u0061’ \u转义字符
输出就是a
进行运算的时候转换成同一类型在进行运算
基本类型强制转换(类型)变量名
左减价乘除先转换类型在做计算
强制转换 由低到高 int 转换成double
自动转换 由高到底 double转换成int
注意:不能对布尔类型进行转换;不能转换成不相干的类型(人——>猪);大容量转换成低容量时要强制转换,反之不用;强制转换可能会发生内存溢出
jdk7特性数字可以用下划线分割,下划线不会被输出,如:int i = 10_000
变量:实例变量(在类里,方法外边),局部变量(在方法里),类变量(实例变量加上static)
布尔值默认false,其余基本类型默认null,final修饰的叫常量不可被修改
final static 和static final 都可以,修饰符不存在先后顺序
命名规范
左移:<< 4左移1位 4<<1
右移:>> 4右移一位 4>>1
字符串连接符如果 ”“ + a + b 会将变量a和b转换成String类型进行拼接
如果 a + b + “” a+b正常进行运算,然后在转化成String与”“拼接
x ? y : z
如果 x 为 true 则返回 y 否则返回 z
优先级:记什么优先级,加括号不香吗?
JavaSE官方文档,jdk8
https://docs.oracle.com/javase/8/docs/api/index.html
增加作者,版本注释等,只要增加在类上面用 /**回车 即可注释,注释完后在方法上也可以打上。
然后通过命令行生成类似的官方文档
1.IDEA 的 JavaDoc 生成功能在菜单 Tools->Generate JavaDoc 项里面。
2.里面有一个 Locale 可选填项,建议在此填写 zh_CN。
3.还有一个“Other command line arguments:”可选填项,非常重要,是填写直接向 javadoc.exe 传递的参数内容。因为有一些重要的设置,只能通过直接参数形式向 javadoc.exe 传递。这里必须要填写如下参数:
-encoding UTF-8 -charset UTF-8 -windowtitle “接口文档3.4” -link http://docs.Oracle.com/javase/7/docs/api
4.点击OK即可将javadoc生成到指定目录。
Scanner input = new Scanner(System.in);
input.hasNext() input.hasNextLine() input.hasNextInt()等//下一个输入,可以用于判断是否还有下一个输入,是否还有下一个输入(行),是否还有下一个整数等
使用input.next() 或 input.nextLine()接受下一个输入
//最后别忘记关闭
//凡是io流要记得关闭,不然占用资源
input.close()
查看类的方法结构。
switch
反编译将.class文件在文件系统中丢到idea创建项目的目录,双击打开即可看到反编译的结果
JAVA中没有goto,但是有标签,用法如下,outer可以换成任意单词,了解即可,程序中最好不要用,不利于模块化。
java都是值传递
多态:
重载:方法名字一样,参数不同
重写:方法名相同,方法参数相同,方法里执行的动作不同
可变参数:
递归:
数组静态初始化,创建+赋值
int[] a ={1,32,4,5,6,};
动态初始化,int[] a = new int[10];然后在赋值。
Java内存分析
Arrays类常用方法:
什么是面向对象:以类的方式组织代码,以对象的方式组织(封装)数据。
继承 extends 子类是父类的扩展
子类无参构造自动调用父类无参构造 super() 父类构造方法在子类构造方法的第一行
父类没有无参构造(只写了有参构造) 子类也没有无参构造。
父类的引用可以指向了子类,方法的调用之和左边的类型有关(静态方法) 父类可以new子类,静态方法属于类,父类无法调用子类独有方法。
父类的引用可以指向了子类,方法的调用之和右边的类型有关(非静态方法)父类可以new子类
重写:需要有继承关系类,子类重写父类的方法
1 方法名必须相同
2 参数列表必须相同
3 修饰符 :范围可以扩大但是不能缩小 public > protected > default > private
4 抛出的异常:范围,可以被缩小,但是不能扩大
子类的方法与父类的方法要一致,方法体不同!
为什么要重写:
1 父类的功能子类不一定需要,或者不满足。
alt + insert : override
父类引用可以指向子类,但是不能调用子类独有方法。子类重写了父类的方法调用重写的方法
对象能够执行那些方法和左边类型有关和右边关系不大。
多态:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系, 类型转换异常!ClassCastException!
- 存在条件:继承关系,方法需要重写。父类的引用指向子类的对象,father f1 = new Son();
- stactic 方法属于类,不属于实例,无法背重写
- final 常量,在常量池中,无法被重写
- private 方法无法被重写
同一方法可以根据发送对象的不同而采取多种不同的行为方式
一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多(父类,有关系的类)
多态存在条件:
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
再次强调:多态是方法的多态,属性没有多态。
instanceof (类型转换)
instanceof可以判断两个类是否存在父子关系
抽象:编程思想!持续学习!!!
- 父类引用指向子类
- 把子类转换成父类,向上转型
- 把父类转换为子类,向下转型,强制转换
- 方便方法的调用,减少重复代码!
抽象:封装,继承,多态! 抽象类,接口
匿名代码块,静态代码块,构造方法执行顺序
先执行静态代码块,然后执行匿名代码块,最后是构造方法
注意:静态代码块只执行一次。例子:
第二次静态代码块不执行了。
stactic,只会在第一次构造方法去执行,其他的每次都会执行,匿名代码块可以用来赋初始值
静态方法可以使用静态导入包这个样子:
final 修饰的类不能被继承,final之后断子绝孙
abstract 修饰抽象类,抽象方法,抽象类写约束,让别人帮我们实现,只有方法名字,没有实现。
特点:
- 不能new,只能靠子类实现。
- 抽象类中可以写普通方法。
- 抽象方法必须在抽象类中。
- 抽象的抽象:约束。
- 存在意义:提升开发效率,抽象出来提供公共模板。
抽象类可以有静态方法
抽象类可以有构造方法,抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码。
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范,自己无法写方法,约束与实现分离:面向接口编程
接口声明关键字 interface
接口中所有定义都是抽象的,致谢返回值和方法名默认是public abstract
接口的作用:
- 约束
- 定义一些方法,让不同的人去实现
- 接口中的方法都是public abstract 修饰的
- 接口中的变量都是常量而且都是用public static final 修饰的
- 接口不能被实例化,接口中没有构造方法
- implements 可以实现多个接口
- 必须要重写接口中的方法
内部类:(不推荐写这个东西,那样的话代码只有你能看的懂了)
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
在写程序的过程中,避免发生错误,错误很致命,造成损失很大。
异常的种类如下:
异常处理关键字,try ,catch,finally,throw,throws
try catch 必须有,finally可以不要
可以有多个catch 但是要从小到大捕获。
选中代码块,用ctrl + alt + t 选择包括的代码块
方法中处理不了异常进行抛出异常
主动抛出异常用 throw
方法处理不了异常,在方法上用 throws
如果需要捕获没有 try/catch 那么就需要throws去外面捕获抛出
throw:生成一个异常对象,并抛出,在方法内部<->主动抛出异常对象
throws:处理异常的方式。使用在方法声明处的末尾<->另外一种try-catch-finally
上游排污,下游治污
自定义异常:
自定义类继承 exception
例子:
测试:
将a设置为11的时候,结果如下:
处理异常实际经验总结:
ascii 表示中文1个字节
Unicode 表示中文2字节
utf-8 表示中文3个字节
将一个数转换成进制:
BigInteger b=new BigInteger("10");//1010
String we = b.toString(2);
System.out.print(we);
//或者
System.out.print(Integer.toBinaryString(10));