20170409
1、每个对象都是某个类的一个实例
2、当将对象引用置入容器时,它必须被向上转型为Object,所以有了范型(为什么不写成泛型o(╯□╰)o)
20170410
1、拥有一个引用,并不一定需要有一个对象与它关联
2、【对象引用】存放在【栈区】,【Java对象】存放在【堆区】
3、
{
String s = new String("a string");
}// End of scope
引用 s 在作用域终点就消失了,然而,s 指向的 String 对象仍继续占据内存空间
4、如果字段(类里面的)是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象(使用 new 来实现)相关联
但如果字段是基本数据类型,即使没有初始化,Java也会确保它获得一个默认值(方法中的变量不是字段, int x ,x 可能为任意值)
5、java方法传递的参数,除了基本类型外,传递的都是对象引用
20170411
1、一个static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间
//今天看到的方法
//查看属性
System.getProperties().list(System.out);
20170412
1、基本类型存储了实际的数值,而非指向一个对象的引用
2、(敲黑板,重点)==和!=比较的是对象的引用,如果想比较两个对象的实际内容是否相等,必须使用所有对象都适用的特殊方法equals()(但这个方法不适用于基本类型)
//今天看到的方法
//生成随机数
Random.nextInt();
Random.nextFloat();
Random.nextLong();
Random.nextDouble();
20170415
为什么有2天没更,因为看《人民的名义》去了。。。全书855页,目前到了第53页,继续哈。。。
1、字符串操作符有一个很有趣的行为(书上说的有趣/(ㄒoㄒ)/~~)如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型
20170416
1、在将float或double转型为整型值时,总是对该数字进行截尾。java.lang.Math中的round()方法才是四舍五入
2、java不允许我们将一个数字作为布尔值使用
3、我觉得这个有点意思:Java编译器生成他自己的“汇编代码”,但是这个代码是运行在Java虚拟机上的,而不是直接运行在CPU硬件上
//今天看到的方法
//1、四舍五入
Math.round();
//2、产生0-1之间的数,double类型,包括0,不包括1
Math.random()
//3、检查字符是否为小写字母
Character.isLowerCase(c)
//4、将String变为char数组
"Test".toCharArry();
20170417
1、在case语句中,使用单引号引起的字符也会产生用于比较的整数值
经过我的测试,下面的代码是会输出数字的
int c = 'a';
System.out.println(c);
//输出97
2、new表达式返回新建对象的引用
3、-------------------重要-----------------︿( ̄︶ ̄)︿----------
1)如果类中没有构造器,则编译器会自动创建一个无参构造器
2)如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建无参构造器
public class BaseTest {
public static void main(String[] args) {
Bird bird = new Bird();//这样写是错误的,因为没有匹配的构造器
}
static class Bird {
public Bird(int i) {}
public Bird(float f) {}
}
}
如上述代码中的注释,那样写是错误的,因为没有匹配的构造器
4、this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可
return this;//返回当前对象的引用
5、尽管可以用this调用一个构造器,但却不能调用两个
this(a);
this(b);//不能调用两个
6、构造器调用必须置于最起始处,否则编译器会报错
7、
8、垃圾回收器只知道释放那些经由new分配的内存
9、Joshua Bloch这个哥们说finalize() 函数是无法预料,常常是危险的,总之是多余的(⊙﹏⊙)b
要使用finalize(),必须是通过【创建对象以外】的方式为对象分配了内存空间,不过Java中一切皆对象(好高深。。。)上述怎么实现呢?
可能是由于在分配内存是可能采用了类似C语言中的做法,比如使用“本地方法”的情况下,调用C的malloc() 函数分配内存,需要在finalize() 中调用free()
20170418
1、方法的局部变量,必须初始化;若类的成员变量是基本类型,则会有初始值
//1、方法中
Void f() {
int i;
i++;// 错误
}
//2、类中
public class c{
int i;
void f(){
System.out.println(i);//正确
}
}
20170419
1、在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,他们仍旧会在任何方法(包括构造器)被调用之前的到初始化
2、初始化的顺序是先静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是“非静态”对象。静态对象只会被初始化一次
3、在静态块里的一行代码执行后,其余行代码就会紧跟着执行
4、编译器不允许指定数组的大小
int[] a1;
上面的代码只是为引用分配了空间(已经足够了),而且并没有给数组对象本身分配空间哦
//今天看到的方法
//产生一维数组a的可打印版本
Arrays.toString(a);