发表于: 2018-01-23 01:46:35
1 566
今天完成的事情:
《Java开发实战经典》
1。面向对象的基本概念。
面向对象的三个特点:
封装性:OOP所遵循的重要原则。捆绑与隐蔽和访问权限。
继承性:OOP的重要概念。由抽象派生具体。独立程序,可复用性。单继承和多继承(通过接口可以实现类似功能)。
多态性:OOP的重要特征。允许程序中出现重名现象,分为方法重载和对象多态。多态性使程序的抽象程度和简捷度更高,有助于分组开发。
这本书里讲面向过程,举了个制作首饰盒的例子,面向过程会直接拿出一个完整的整体。而面向对象则是拿出一张图纸,确认后再分块制作,最后组装。所以这样我觉得同样是解决一件问题(也就是处理一个对象),面向过程只看到对象本身,而面向对象会先抽象出一个类之后再解决这个具体的对象。但是例子中面向对象还多了一个分块制作。所以面向对象除了多了一个抽象过程,还有个可以分块完成再组装的特点。这两个特点都属于OOP的继承性。正是继承性这个特点区别了两种编程方法。封装性保证了程序的运行效率、稳定性和安全性,多态性是则是特征,从继承性来,又助于提高抽象程度。
《Java核心技术卷一》中两者的区别的是程序对于算法和数据结构的定位顺序不同而导致的。这个理解不了,以后再看吧。
2。类与对象。
类是蓝图,对象是实体(实例)。
栈内存与堆内存。栈内存储存存放内容的地址,堆内存存放内容。
class Person{ //定义Person类
String name; //声明类姓名变量(属性)
int age; //声明类年龄变量(属性)
public void tell(){ //定义类方法(行为),方括号{}内为方法内容
System.out.println("姓名:" + name + "\t 年龄:" + age); //类方法内容
}
}
/*Person类建立好后要想使用必须有对象,所以这里在ClassDemo类下新建了Person类的对象per,这样ClassDemo类可
以通过使用per对象访问 Person类。*/
public class ClassDemo03{
public static void main (String args[]){
Person per = null; //声明对象per(定义Person类的对象per(类的实例化)),有了栈内存
per=new Person(); //实例化对象,关键字new命令编译器给per的内容分配空间
per.name="李铁牛"; //对象per访问Person的name属性并赋值
per.age=23; //对象per访问Person的的age属性并赋值
per.tell(); //对象per访问类Person类的tell()方法
}
}
3。封装性。
4。构造方法。可以看成是特殊的方法。构造方法依据括号()内的参数类型和参数个数可以重载。
public 类名(参数类型 参数,······){
内容;
······
}
5。匿名对象。字符串都是匿名对象。只有堆内存,没有栈内存,使用过后,Java的垃圾回收机制(garbage collection,GC)会不定期清除。另外字符串的内容都是不可更改的,对于String str1 = "hello";和String str1 = "hello world";这两句,原本hello再堆内存中的位置和内容并没有改变,只是改变了str1在栈内存中的地址指向,这里就体现了引用。
6。String。
7。引用传递。这里就是栈内存和堆内存的关系。栈内存存着堆内存的地址,所以是引用。而传递就是栈内存中的地址变来变去。
明天计划的事情:
1.关键字this和static。
2.代码块。
3.构造方法私有化和内部类。
遇到的问题:
String对象实例化时有种方法:
String name = "aaaa";
String name = new String("aaaa");
这里一开始不清楚区别,因为前面有例子也用这种方法,后来知道关键字new,它除了命令编译器分配堆内存,还会调用构造方法赋值。而构造方法是每个类必须有的,如果没有编译器会在编译过程中会自动添加一个没有参数和内容的构造方法。
收获:
this(特指本类的调用,主要是避免混淆),getter(),setter(),equals()等,收获还挺多的.
评论