1.负数的二进制表现形式是整数取反+1
int 6: 0000-0000 0000-0000 0000-0110
int -6:1111-1111 1111-1111 1111-1010
integer.toBinaryString(x)//返回x的二进制的字符串表示形式
System。out.println(" "+变量名);
2.switch(表达式)
{
case 取值1:执行语句;break;
case 取值2:执行语句;break;
default: 执行语句;break;
}
do{
//
}while(条件表达式)
3.for和while区别
for(int x;x<3;x++)//x的作用域只在for循环内,如果变量仅用于循环增量存在,建议用for,及时使释放内存
while的初始化动作在外面,所以循环变量的作用域还在。
条件表达式要么是真要么是假否则报错,所以for(;非条件表达式比如print;)错的
for(表达式1,表达式2;条件表达式1;表达式3,表达式4)可以有0个或多个执行表达式,当不写条件表达式时默认true,进入无限循环
\t制表符
4.函数重载
在同一个类中。与返回值无关,根据参数列表区分。
5.数组(数据类型分为基本数据类型和引用数据类型,数组类型属于后者)
int[] arr=new int[3];
int[] arr=new int[]{1,2,3,4};//有一个容器实体
int[] arr={1,2,3,4};
6.java内存结构
五区:方法区、本地方法区、内存结构、栈内存、堆内存//每片内存中的数据处理方式不一样
int x=3;//栈,函数结束自动释放,方法内的变量
int[] arr=new int[3];//堆,存放实体,arr存放该数组在堆中的内存地址,引用数据类型。
只有引用数据类型才能用null常量,x=null;//x不再指向该数组,当一个堆中的实体没有任何引用再使用它时,被视为垃圾,不会立刻释放,而是jvm不定时地启动垃圾回收机制将该实体在堆中清楚。
堆内存3特点:1.内存地址值2.默认初始化值3.垃圾回收机制
int[] arr=new int[3];
int[] y=arr;
y[1]=89;//则此时arr[1]也等于89,y和arr操作同一个对象
arr=null;//堆中有没有垃圾:没有,y引用了堆中的实体。
int[] arr=new int[3];
int[] y=new int[3];
y[1]=89;//arr[1]依然=0
arr=null;//堆中有没有垃圾:有,y引用了堆中的实体。
int[] arr=new int[3];
arr=new int[3];//可以,与上一个不是同一片堆内存了
7.数组初始化
int[] arr=new int[]{1,2,3};//右表达式可以建议不指定长度,一面匹配不上出错
int[] arr={1,2,3};//数据明确的情况下用这种
int[] arr=new int[5];arr[0]=1;//数据不明确的情况下用这种
下标越界编译不提示,运行时异常。因为编译时不分配内存空间,运行时才分配。
ArrayIndexOutOfBopundsException数组下标越界异常
NullPointerException:空指针异常。当引用没有任何指向,值为null的情况,该引用还在用于操作实体。
数组名.length//数组的长度
遍历数组(判断在不是最后一个元素的情况下打印逗号,如果是则不打印逗号)
直接System.out.print(数组名);//会出现[I@数组地址//[数组,I整型,数组地址是由哈希算法算出来的哈希值
//二维数组会出现[[I@数组地址//[[二维数组
二维数组
int arr[][]=new int[3][4];
System.out.print(arr[0]);//打印[I@数组地址
int arr[][]=new int[3][];
System.out.print(arr[0]);//打印null,arr[0]是二维数组的第一个元素,是一个数组,是一个引用类型,引用类型默认初始化为null
数组求最大值时可将max初始化为数组的任意元素。
或将max角标初始化为数组中的任意角标//换句话说可以实现将临时变量初始化为0
8.选择排序,选择一个位置拿该位置的值不断地和后面地数进行比较判断大小进行换位 On2
数组排序函数返回void,一个实体,多个引用同时操作。循环变量++也可以,--也可以
冒泡排序:相邻的两个元素进行比较,如果符合条件换位,一趟下来最值出现在最右(或第1个元素)可不再参与排序。x+y=arr.length-1//避免越界
希尔排序最快!!!!三层循环加位运算
冒泡选择性能低:堆内存中数组元素换位比较消耗资源。
改进:在堆中发现需要换位置的元素先不进行换位,而是在栈内存中定义了临时变量记下来,当比较过程进行完成后取最终的结果进行换位即可。将堆内中频繁换位置的开销转移。
import java.until;
Array.sort(arr);//真实开发排序
getIndex(arr,key);//查找,不存在返回-1,存在返回第一个位置
9.数组元素查找,用-1表示该元素不存在的情况
练习:有一个有序数组,想要将一个元素插入到该数组中,还要保证数组的有序性
解决:基于折半查找的演化:折半查找key,若存在,则下标为要插入的位置,若不存在则min为要插入的位置(将return -1改为return min;)
十进制转二进制:{循环:模2除2}倒序StringBuffer 的reverse()方法
十进制转十六进:循环8次 或者while(num!=0)可以算负数的:求出低4位的值(num&15)--->转换为16进制中的1位,若>10(char)(temp-10+'a')---> 将num>>>4位(无符号右移,向高位补0)//倒序,去掉前面的0,remove方法
查表法十进制转十六进制:将temp作为下标查表(0-15与0-F一一对应)
字符数组被定义后默认初始化值为'\u0000',相当于空格。
10.构造代码块:作用给对象进行初始化,对象一建立就执行,且优先于构造函数。
构造代码块是给所有对象进行进行统一初始化,构造函数是给对应对象(根据形参列表匹配)进行初始化。
定义对象的共性。
类中用{}括起来
11.什么时候使用静态static
静态变量:对象中出现共享数据[不是属性]时
静态方法:当功能内部没有访问到非静态数据(对象的特有数据)时该功能可以定义为静态的
工具类:每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装成方法,以便复用。比如对数组操作相关函数可以单独封装成一个工具类,在别的类中用类名.方法调用。可以通过对象调用方法。或者封装为静态方法,通过类名.方法调用。
将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的,为了更为严谨,强制让该类不能建立对象,可以通过将构造函数私有化完成。将不提供给外界的方法也私有化。
将工具类编译成运行文件.class,再编译使用工具类的类时虚拟机会在指定路径(set class path=目录)或当前路径下查找该class文件,如果没有.class,就会查找对应的.java文件进行编译,若两个都没有 报错。
set class path只包含目标路径之后编译可以,运行异常:所以set class一定要添加.;当前目录
所以set class path=.;目录2;//.目录表示当前目录
12.javadoc的制作
/**
这是一个xxx类,提供了xxx方法
@author xx
@version v1.1
*/
类中public方法前
/**
函数功能
@param xxx接受一个xxx变量
@return 返回xxx
*/
javadoc -d 目录 -author -version 文件名.java//目录没有会新建,命令会生成一个HTML类型的说明文档,从index.html开始看
[想要将一个类生成帮助文档,该类必须是public修饰,在帮助文档中体现的方法必须是public或者protected修饰的,构造方法也是]
默认的空参构造函数[看不见的]的权限与所属类一致,自己写的空参构造函数叫自定义函数
在静态方法中调用静态方法前面相当于省略了类名.
在非静态方法中调用非静态方法,前面相当于省略了this.
13.单例设计模式
饿汉式:
在以实现的类中加以下三步(先初始化):
private static 对象=new 构造函数();
pricate 构造函数{}
public static 类名 getInstance(){return 上述对象;}
懒汉式:延迟加载 2次判断
14.super关键字
java不支持多继承[其实可以,有隐患,当多个父类中定义了多个功能但功能内容不一致时,子类不知道进行哪一个]
支持 多实现
支持多层继承,查阅父类功能,创建子类使用功能