think in java 学习总结

来源:互联网 发布:淘宝开个充值店怎么样 编辑:程序博客网 时间:2024/04/18 12:31

 第一章   对象导论

计算机是和人脑相类似的,所以计算机语言也可以和人类语言有共性。我们不能很好的去理解计算机的世界,但是,我们可以把计算机类比成人类,计算机语言类比成人类语言,这样,在学习编程语言的时候会轻松许多,在以后的学习中千万记住这个原则。 

所谓的面向对象(我自己的理解):把程序看成我们生活的世界,在程序的世界里,有各种各样的东西,比如狗、石头。。。,而这些东西都是由属性、行为和标示构成的。我们进行编程,其实就是在用这些对象的属性和行为来组建生活,解决生活中遇到的问题。(这样说是不是暗示着有某个上帝在用我们这些人类和各种动植物进行他们的编程,其实我们就是上帝构造的类?)。而类,就是所有具有相同属性和行为的对象的集合,面向对象编程最关键的一步就是要根据纷繁的世界,抽象出不同的类。

访问控制:就是类内部,某些属性和行为隐藏,不对外部开放。当你新建一个对象,用这个对象的某些行为为你服务时,你只能用它开放的部分,隐藏部分是不允许你修改的。访问控制的目的就是让客户端程序员不能随意修改你设计的类的属性和行为而形成不必要的bug,并且能够让客户端程序员专注于自己的应用开发,不必在意类的实现细节,提高效率,与此同时,如果你觉得你的类不够完美,要修改下,这样也不会影响客户端程序员应经写好的应用,因为他们的应用只是调用你的开放方法,而你修改这些开放方法不影响他们任何调用。比如,有家饭馆的回锅肉炒得特别好,你吃饭的时候不能知道他们是怎么做的(会做生意的都不会让你知道吧),你只需要点回锅肉,之后就等着上菜就行,不必在意回锅肉的肉材选择,作料配比等。当厨师觉得回锅肉还能炒得更好的时候,你还是依旧点你的回锅肉,然后你就能吃到改善后的饭菜了。private权限只能是自己类内部的方法能访问、修改。protected权限是自己的子类可以访问、修改。public就是公开的东西,谁都可以用了。缺省权限就是包访问权限,对于包内的类是公开的,对于包外的隐藏。

复用的实现:组合和继承。组合就是在你新建的类里面,创建了一个已经存在的类的对象作为成员变量,进而使用这个对象的方法和属性帮助实现你的新类的某些行为。这样的成员变量通常是private的。如果这样的成员变量是可以在客户端程序员动态实例化的,那么这样的组合又叫做聚合,比如你的汽车这个新类,他有照明灯,但是你在抽象新类的时候,最好不要直接给这个类定义照明灯这个成员变量,而是给他一个灯这样的成员变量,而把具体是照明灯还是什么灯,等你在造具体的大众golf这款车的时候再把灯这个成员变量实例化一个照明灯给他,这就是聚合。组合和聚合是has-a的关系。而继承却是is-a的关系,新类就是他所继承的类的类型。

多态:没有继承就没有多态。多态就是在方法定义的地方用基类,进而调用基类的行为实现自己的行为。而在具体使用的地方用基类的任意子类,使用子类的相同方法进行实现。这就是所谓的后期绑定,在实现时进行类的动态绑定。接口和抽象类都是属于类的,既然有了类,那么接口和抽象类的作用是什么呢?其实,接口、抽象类、类最大的特性就是抽象,在没有实例化之前,他们代表的只是概念上的东西。狗不是具体的指代某只狗,而大黄就是活生生的你家的一只狗。但是接口和类最大的不同点在于:接口的方法没有方法体,全部由子类实现。接口这样的类,就定义了子类具有的共通行为,但是没有具体给出行为。好吧,多态的叙述不够好,等以后措错辞重写。

第二章、一切都是对象

java里一切都是对象,那么java是怎么操作对象的呢?java中,操作对象都是通过操作对象的引用,进而操作对象的。对象的引用就像遥控器,而对象就是电视机,当想看其他节目时,我们只须拥有遥控器,而不是去操作笨重的电视机。当然,遥控器是可以独立存在的,String s;这个语法是不会产生错误的。但是当使用s时,会出现异常,因为此时只有遥控器没有电视机。

java对象的存储:java大多数普通对象是存储在堆中的,而对象的引用都存储在堆栈中。堆栈中的东西必须有确切的生命周期,而堆中的东西则不需要明确生命周期。java基本类型是特殊的类,他们存储在堆栈中,并且变量直接存储值,而不是引用。java中的对象数组其实就是引用的数组。也就是说这个数组里存放的都是对象的引用,而不是对象本身,当没有初始化时,所有的数组元素都是nulljava的作用域也是由{}进行封装的,一旦出了作用域,对象的引用就失效了,但是对象却能在作用域外面存活{String s = new String()}在大括号外面,s不再存在,但是s指向的对象却还占据内存空间。而这时,为了防止残存在内存中的对象占满内存空间,java的垃圾回收机制就发挥作用了。

java为每个类的基本类型成员变量都进行了默认初始化。注意,仅仅当这些基本类型是类的成员变量时才会被默认初始化,当基本类型仅仅作为方法内的一个变量时,不会被初始化。

public class Test {

    private float i;

    public static void main(String[] args) {

        Test t = new Test();

        String s;

    System.out.println(t.i);

       System.out.println(s);

    }

}

上面,t.i能通过编译,并打印出0.0,而打印s在编译时便出现错误。
 java内对象的传递都是引用传递,但是基本类型除外。