《Java编程思想》学习记录(一)

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);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值