《Java开发实战经典》笔记
1.引用数据类型(class, array等),其实就是分栈内存和堆内存的数据类型,在栈内存中存储对象, 在堆内存中存具体值。
因为数组是引用数据类型,所以数组变量保存的并非是数组的实体,而是数组堆内存的地址。
2.对于引用数据类型,比如数组传递进方法中后,如果方法对数组本身做出了修改,修改结果也将保存下来,即使方法没有返回值,修改的结果也将保存。(这也能够理解为什么用setter 设置对象属性后getter就能输出修改的内容)
3.被封装的属性或方法只能在其类的内部被调用,而不能在类的外部调用。
4.setter的作用是为属性赋值,赋值之后这个属性值就改变了,在主方法中用getter的话得到的值就是修改的值。
5.new Person("Oscar", 30).tell(); 这个是匿名对象的方法使用格式!
6.使用new关键字的话,不管怎么样都会开辟新的堆内存空间,而String str="Hello"的形式可能情况会不同。
7.一定记住字符串的内容一旦声明不可改变
一个String对象的内容的改变实际上是通过内存地址的断开和连接完成的,而字符串本身的内容没有任何改变,即虽然你没有用new关键字,但程序自动开辟了一个新的堆内存。
8.引用传递是指将堆内存空间的使用权交给多个栈内存。
9.
将传递参数的name值赋给name中的name属性,即把从构造方法中传递进去的参数值付给属性,这是this的一个用法:在赋值时明确地指出属性!!!。比如“this.name”属性和“this.age”属性。建议以后在类中访问属性时都加上this
10.
用this调用构造方法优点是可以重复执行this指定的构造方法,很方便,但要注意使用this调用构造方法时必须,也只能放在构造方法的第一行,并且还要留一个出口,也就是说程序中至少存在一个没有包含用this调用构造方法的构造方法。(一般都将无参构造作为出口)
11.对象比较操作是java中比较核心的操作,
步骤:(1)判断对象地址是否相等;
(2) 分别判断对象属性是否相等;用 if(p1.compare(p2)) 来判断
p1.name和p1.getName都可以访问或取得对象
12.使用类名访问static属性:
Person.country="B city";
13.String args[]表示的是运行时的参数,参数传递的形式为“Java 类名称 参数1 参数2 参数3”。所有的输入参数都保存在args数组之中。
14.构造块(直接写在类中的代码块);
构造方法;
主方法;
15.
16.使用内部类可以方便的访问外部类中的私有属性。使用static定义内部类就可以直接访问内部类中的属性
总结:
你不能在主方法类里直接调用内部类Inner,在外部类中可以调用内部类,在主方法中只能调用外部类,或者通过外部类调用内部类(即经过static声明的内部类)。
总结:内部类Inner里面有print()方法,
并且内部类存在于外部类Outer的fun()方法之中,
fun()方法还在Outer外部类中被调用了。
所以在主方法中用new Outer().fun()来进行赋值,调用方法的操作。