序列化,
把对象转换成二进制(字节序列)存到文件中就是序列化
反序列化,
把文件中的二进制(字节序列)对象恢复到类中就是反序列化
◆注;在序列化时一般需要提供一个序列化编码,确保在恢复是,仍然是指向同一个内存区域
序列化的作用
使得对象永久的存储在到Disk中。
可变序列化;
在对象创建了出来之后,依然可以改变位于对象中的内容,如StringBuffre
不可变序列化;
在创建对象了之后,内存中的内容是不可变的,如String
什么是可变类,和不可变类?
可变类;创建出这个类的实例时,是可以改变这个类实例的内容的
不可变类;创建出这个类的实例时,是不可以改变的。
值传递;(方法形参是,基本数据类型)当传递一个实际的值给这个形参时,是用来初始化这个形参的,
而形参的值发生改变时,
★是不会改变传递过来的这个实际的值★
因为2个位于内存空间,地址也不一样,而且当调用这个
方法时是不会影响(改变)实际的值的。
值传递的类型时基本数据类型。
是一个值拷贝的过程。
结论;没有改变了传进来的位于内存中的值。
引用传递;(是对象,引用类型)当调用某个方法是,参数是对象 或者数组 ,而这个对象调用某个方法时实
际上指向同一个地址值中的。而当实际使用这个方法就是使用
内存中的地址值空间实际的参数进行操作的。
而当这个方法结束时,
★这些操作(修改)了的★
属性会被保留下来,并且会进行一个
对位于内存中的实例空间的
参数会进行修改。
引用传递,是引用类型的,在传递时是传递地址值。
结论;改变了传过来的位于内存中的对象的值。
什么是可变字符,和不可变字符?
字符串的不可变字符序列,和可变字符序列。
不可变字符序列(String);
String的值是存到内存的方法区中的常量池,并且String这个类是使用
final修饰的,而且这个类底层存储是使用数组的存储,并且其数组是
使用final修饰的。使得其在内存中是不可以改变的。
所以创建新的字符串时是会在内存中创建出新的一个
新的字符串,即便是使用了 + 连接符,因为
final是不可修改的而且每次做完一次
连接在内存中都是再次创建。
并且;当2个字符的内容是一样的,会指向同一块内存空间,
而不会在此为此字符串在常量池在再次创建一个。
也是一个节约内存的机制。
可变字符序列(StringBuilder and StringBuffer);
当使用append()方法时是将append的值存到数组中当调用了toStirng时会将数组的
值拷贝到StringBuiler的对象中(引用传递),从而实现一个追加的功能
◆注;String,StringBuilder,StringBuffer
String;
是位于常量池
StringBuilder,在底层存储时是使用数组来存储的,默认空参的构造器数组是16。当超出数组长度
时,则*2+2.
StringBuffer,在底层存储时是使用数组来存储的,默认空参的构造器数组是16。当超出数组长度
时,则*2+2.
为什么不同包下的类继承Object的?
因为Object是一个超类,使得语言更加灵活,可以在扩展类库是使得其可以兼容所有类库的类。
接口有没有父类?
没有,没有构造器而且是用于顶层设计,````而且也没有``继承Object
除非是接口继承接口
当内部类重写了 toString方法了怎么获取地址
classpath变量在JAVAEE的使用百度
下载Oraclesql
重写hashCode equals comparator toString等方法的作用
hashCode就是一个散列码用于帮助快速的查找,hashCode是计算出每一个实例化的对象实例的内存地址
实验;〓 当做类型自动提升是否为-1
◆注;(String类是使用它的value值作为参数然后进行运算得出hashcode的
换句话说, 只要值相同的String不管是不是一个对象,hash值全部相等
因为底层存储和指向机制)。
集合为什么要重写equals方法
因为contains是通过equals方法,如果是自定义类是调用
自定义类的equals方法。
getClass()得到当前对象的类
当在做Scanner输入是,如果是要抛出异常,并且再次输入要使用while并且在异常处理要在加一个next()将输
入的错误的抛出的异常抛给这个空的 位于异常处理的位置next()
但是;如果是引用类型就不用,因为引用类型会自动做equal
而基本数据类型不会,所以要再次加上空的next()
意义;会将其发生异常的值,抛出给这个空的next();
当指定了泛型后,在使用匿名类进行重写还要给匿名类进行一个指定泛型。
为什么使用Set要同时重写HASHCODE和EUQuals方法?
因为底层存储是根据HASHCODE散列计算的值来进行存储的,EQUALS就是当2个HASHCODE值一样是用于判断
内容是否相同,相同则不加入,不相同则加入。
如果2个值的HASHCODE值相同,EQUALS不相同则会在其元素位置,后面在开辟一个空
间出来。用于同时存储2个元素。
泛型的限定;
(List) extends类A> 表示类A是下的子类,而?是List
能存放本类以及本类下的
子类
(Collection) super 类A> 表示?是类A的
父类
只能存放本类以及父类
泛型方法是可以用静态的
SERIALIZEBLE
serializeble是一个序列化接口,实现这个接口的是可以序列化的,并且实现了接口给实现类添加了一个序列
号之后可以保证在将文件读出时,不会出现丢失等,而且实现了这个接口可以存储
到这个类对象的状态。
为什么COMPARATOR不用重写EQUALS
2个实体EQUALS为TRUE那么2个实体的HASHCODE必须是相同的(自己写的那就没意义了!)
而重写COMPARATOR或者COMPARE时,建议重写EQUALS方法,因为避免2个值一样则后一个是无法
加进来的,所以建议同时重写EQUALS方法,与HASHCODE方法,HASHCODE是确定2个值
在内存中的位置。
二分法的代码
public static int search(int[]arr, int key) {
//记录数组的第一个位置
int start = 0;
//记录数组的最后一个位置
int end =arr.length - 1;
while (start<= end) {
//从中间开始找
int middle = (start + end) / 2;
//如果输进来的元素是小于中间的元素则
if(key < arr[middle]) {
//取出以中间元素为开始的前面的元素
end = middle - 1;
//如果输进来的元素时大于中间元素则
}else if (key > arr[middle]) {
//取出与中间元素为开始的,最后一个元素为结束
start = middle + 1;
}else {
//否则返回中间元素
return middle;
}
}
return -1;
}
}
给一个字符串赋值那么这个字符也是一个对象,因为这个字符串是存在内存方法区中的常量池的。而这个
字符串是有一个地址值的。
数组转集合的方法。
集合转数组
Array.adList(arr);
toArray();
递归;不断传递,直到末尾
可以使用方法达到递归的效果
\r\n的作用
\r是换行,一般是空行
\n是回车并且换行,一行是一行的尾部
java中的switch语言支持什么类型的值
【Java初学者常见问题_字符串序列化_可变不可变_传递(值|Java初学者常见问题_字符串序列化_可变不可变_传递(值,引用)】
byte short int char
·注;在JDK7.0之后增加对字符串的String的支持
写集合遍历方法到总结中
类.class的和this的作用
正在运行的类
注意;当使用Thread而不是使用Runable时要,并且是使用同步方法的形式时,
如果变量是static 方法也要是static不然synchronized则不起作用
因为默认同步方法调用的是this,而静态调用的是类.class
组播是强制,广播是非强制
declare
i number(30) := 0;
begin
loop
exit when i > 999999
insert into emp(empno,ename)values(i,'XX');
i := i+1;
dbms_output.put_line(i);
end loop;
end;
/
exception