目录
常用DOS命令:
关于位运算(高效):
Java内存:
重写
多态:
抽象类
接口(纯纯的约束)
内部类
异常
IO流
StringBuffer & StringBuilder
Collection & Map
Object类
泛型(JDK5)
常用DOS命令:
盘符切换:C:、D:等等;
查看目录下所有文件:dir
切换目录:cd ..返回上一级
清理屏幕:cls
退出终端:exit
查看电脑IP:ipconfig
鼠标右键即是粘贴
ping url 得到。。
del 删除文件
cd> 创建文件
rd 移除目录,首先得是空的
JDK、JRE、JVM
JDK:包括所有,在JRE上扩充一些工具
JVM实现跨平台
编译型与解释型
java文件(源文件)经过Java编译器成为字节码文件(.class)
之后加进类加载器校验,正确后交给解释器解释给机器运行
IntelliJ IDEA:东欧,捷克
.equals()与==,
== 对比是否是同一个实例
.equals()对比字符串内容
!!!
所以不要用==对比字符串。
强制转换里面:注意内存溢出,精度问题。
int与int相除的时候应该转换一下
几个不同类型变量相计算时候以最上级类型为结果
!!!instanceof也是关系运算符
关于位运算(高效):
A^B(异或):相同为0不同为1
~B:取反
左移与右移:
左移一位相当于 0001<<1 = 0010, 即,*2
右移则为/2
+号的使用顺序不同会导致sout结果不同:
sout("" + a + b) != sout(a + b + "")
三目运算符
x ? y : z; x为真返回y否则返回z;
一般利用公司域名的倒置作为包名。
JavaDoc命令是用来生成API文档的:
@author
@version
@since (需要使用最早的版本)
/** enter
用DOS命令行 生成javaDoc
也可以用IDEA生成
会多一个 index.html
next()与nextLine(), 区别:next()只接受字符,字符之前的 直接过滤掉
之后的 直接判定结束,相反nextLine()以回车为结束符的
hasNext() //判断用户是否输入
!scanner.close()
float要0.0f才行
switch中的case穿透:
虽然default和break都是可选
JDK7可支持字符串,但其本质也还是数字
!!反编译:找到project文件move字节码.class到包下双击打开能看到字符本身还是
数字(经过hashCode转换后)
100.for;
for里面仨参数都能空
goto:带标签的break和continue
outer: for(xxx;xxx;xxx):
....{ continue outer;}
System.out.println(): System为类out为标准对象println为方法
方法的原子性:一个方法最好只有一个功能
?java为什么是值传递
命令行传参:利用main传参:编译时候不需要包名(只需加到路径里面)而在运行时候需要
java.包名.类名才行, 然后后面输入字符串数组就行了
!psvm
static方法不可调用非静态方法
可变参数:指定参数类型后加一个省略号:
!可变参数必须在参数列表最后面
int...i,本质就是数组,所以传数组也可以。
数组:相同数据类型的有序集合,长度不可变
静态初始化:int[] array = {x1,x2,x3,x4,x5,...,xn}
动态初始化(包含默认初始化:0):先开辟空间,再一个个赋值
数组也是对象所以在堆中
数组的toString是地址;
util里Arrays类的常用方法:
toString:打印
稀疏数组(为二维数组):压缩算法:数组中大部分为同一元素
array[0]的[1][2][3]分别表明原来的行数,列数,元素数,之后的array[1,2,...,n]分别表示每个值的行,列和值;
Java内存:
堆:new出来的对象,数组(一大区分长度构建小区),(动态)方法区:类储存模板,方法以及常量池;
栈(main方法是摞在最底下):引用变量名(指向堆中的new 对象,包括读写改查操作)
面向对象的本质:以类的方式组织代码,以对象来封装数据;
认识论角度:先有对象后有类
代码运行角度:先有类后有对象。
引用传递:本质还是值传递,但是对象一旦生成就指向一个具体对象
对象生成时候会默认调用构造函数,null,0等等(new关键字本质就是constructor的调用)
?为什么constructor不能用void
封装的核心是在getter与setter方法体内给予一定的筛查过程来判断安全性合法性等等。
重写
先调用父类的无参构造super();
!!!this()就是本类的构造函数
static方法从属于类,A a = new A() =>其实只是与左边有关系,因为左边是类,右边是对象。左边只是包含了右边的引用(地址),真实的功能实现部署都是在A类内的定义。
static方法不可重写
重写时,范围可以扩大但不可以缩小,异常范围可以被缩小但不能被扩大;
为什么需要重写?:父类功能子类不一定需要,或者不一定满足。
多态:
存在条件:1 继承 2 重写 3 向上转型
new A(); newB(); ....new everything(); 一个对象的实际类型是确定的
However,可以指向的引用类型就不一定一样了;
自我理解:向上转型—>将子类的引用赋给父类对象,之后此变量储存子类地址,并且同时子类又继承了父类所以导致此变量中的引用可以调用子类以及父类的属性和变量,即,具有不同意义。
新理解:关键在于寻找,子类对象赋予父类变量时,不同方法的调用会驱使java去寻找调用的方法在哪,通过参数列表,覆盖与否等等。
!向上转型不能调用子类独有的方法
instanceof 关键字:左右两个对象须存在继承关系才可以;
还是同上,对比的应该还是左边变量里包含的对象引用与右边类有无继承关系;
向上转型:Person p = new Student(); =>其中“型”说的就是Student类型变成了Person类型,其内引用不变。
同理,向下转型:并不是上句Person p = new Student();简单地左右交换(即,Student s = new Person(); ps: 会报错)因为涉及向下改变类型,会导致丢失方法等内容,而且需要(强制转换)。
静态代码块:static{...} //只执行一次
!!静态代码与类一起加载,类内高于constructor
?静态导入包 import static 包...; 目下就不用class.method();了,直接method();
抽象类
abstract用于类以及方法;注明了抽象类无论有或没有抽象方法都不影响,但是注明抽象方法就必须要注明抽象类;
继承抽象类的must重写抽象方法,除非派生类亦是抽象类;
抽象类不能实例化;
接口(纯纯的约束)
其中属性默认全是public + final + static(很少定义)
方法则是public + abstract,可直接 返回值 + 名字 + (参数列表);
内部类
Outer. Inner inner = outer.new Inner();
可以获得外部类的private属性
!!一个java文件里只能有一个public class但可以有其他class
。。。局部内部类:方法里也可以定义类;
匿名对象:new class().method/.attributes;
。。。???接口回调:new Interface(){重写方法}
异常
分类:
- Exception extends Throwable
1.checked (检查性异常):必须处理的异常
2.unchecked(运行时异常):程序逻辑引起的异常,一跑起来就异常了
(RuntimeException)== 处不处理都行
(IOException)
- Error extends Throwable
虚拟机错误,一般是程序无法察觉与控制的
- Try Catch..
使程序继续执行,而throw会使程序产生异常
IO流
//write something to a text file;
PrintWriter output = new PrintWriter("file name.txt");
output.println("QIJICHEN");
output.close();
//Do not forget to throws IOException!!!
//If file already exist, it'll be erased.
//Second way to avoid erase content.
PrintWriter output = new PrintWriter(new FileWriter("name.txt",true);
// "true" means keep it if exist.
//read something from a file
Scanner input = new Scanner(new File("name.txt"));
while(input.hasNext())
{
...
}
input.close();
StringBuffer & StringBuilder
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
Collection & Map
- Collection(一组Object)
三个子接口:List、Set、Queue;
- HashSet implements Set extends Collection extends Iterable;
- Map
HashMap implements Map, Serializable,Cloneable;
Object类
- finalize() => 用于实例被垃圾回收器回收时触发的操作,当 GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法。
- hashCode() =>返回对象哈希值(表明在哈希表中的位置)
- notify() => 用于唤醒一个在此对象监视器上等待的线程
- wait() => 让当前线程进入等待状态
泛型(JDK5)
- 泛型方法
- 泛型方法
public static < E > void printArray( E[] inputArray) //普通的
public static
- 泛型类
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。
- 类型通配符
类型通配符一般是使用 ? 代替具体的类型参数。例如 List> 在逻辑上 List



