zoukankan      html  css  js  c++  java
  • Core Java 第四章总结

    封装:实例域,方法
    防止类中方法访问到其他类的实例域,仅通过方法进行交互。
    继承:拓展一个类的方法和实例域。所有类继承自超类Object
     
    对象变量仅仅引用对象,不实际拥有对象。变量可显示定义为null
     
    自定义类
    class ClassName{
    field1
    field2
    ...
    constructor1
    constructor2
    ...
    method1
    method2
    ...
    }
     
    构造器:与类同名,只能随着new被调用。构造器不要定义和实例域相同的变量
     
    private方法:只有自己的方法可以调用
    private域:只有同类的方法可以修改访问
     
    this关键字表示隐式参数,即对象本身。
     
    方法返回值不能是类自身的可变对象引用,否则会破坏封装,要返回则需要返回该对象的clone值引用。
     
    final关键字:定义后必须初始化,通常用于不可变常量和不会被更改的类对象。对象若可变,final修饰的变量只是引用关系不会变,对象本身可以变。
    static关键字:
    静态域:每个类所有对象共享。
    静态常量:public static final 定义后不再变直接用。
    静态方法:不能向对象使用,没有this参数,直接用类名调用,该方法可以访问静态域。
    使用场景:(1)不需要对象状态,操作通过显示输入的参数完成。
    (2)该方法只需要访问静态域
     
    工厂方法*:重要考察点,书上一笔带过
    用工厂方法代替new实例化新对象,给你系统带来更大的可扩展性和尽量少的修改量。
    之后细看
     
    main方法
     
    方法参数:
    JAVA总是按值调用,即方法得到所有参数的拷贝,而不是引用。但是传入方法为同一个对象的引用时,复制的只有引用,方法内部对对象的操作会影响到引用的对象,但改变引用的做法不会改变对象。
     
     
    String q="fuck";
    String p="hahaha";
    swap(q,p);
    System.out.println(q);
     
    public static void swap(String a,String b ){
        a="??";//1
        //a.toUpperCase(); //2
    }
    这里输出还是“fuck",因为在函数内部是把拷贝引用a的引用对象指向了一个新对象。
    2号代码也不行,依然输出“fuck”,因为a.toUpperCase();这句:按照JAVA的字符串规则,是生成一个新串,而不是在原串上改动。所以a这个拷贝的引用位置又变了。如果用stringbuffer, 不改变引用的情况,内部的append方法会影响到外面的对象,因为两个拷贝作用在一个对象上。
    所以说,Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。
     
     
    4.6对象构造
    重载:同名不同参数的方法。和返回值无关
    jvm调用方法前根据方法名+参数列表(参数类型+参数名) 唯一确定要调用的方法。
    返回值不用考虑,返回值是调用方法后的结果。 编译不通过,更谈不上被重载了。
    不会有不同返回值,其他都相同的方法。
     
    默认初始化:
    构造器不显式初始化的,数值赋0,对象引用为null
    不编写构造器,系统自动提供无参数构造器。
    提供了有参数构造器而不提供无参数构造器的,系统视为非法。
     
    显式初始化:
    类定义时候直接初始化。预赋值在构造器之前执行,所以构造器可以覆盖预赋值。
     
    重载构造器中可以用this(...)调用另一个构造器,这样方便使用构造器的公共部分。
    初始化块机制,放在构造器之前,构造时被调用。
    如果对静态量的初始化比较复杂,可以编写静态初始化块,在块前加关键字static,只在首次实例化时执行一次。
    JAVA没有析构器,但内存回收上有一些选项。
     
    4.7包
    编译器看来,嵌套的包之间没关系。
    一个类可以使用包之中的所有类,以及其他包的公有类。
    两个包有同名类,并且被调用时,编译器会出错。这种情况,在import 。。. 。。.*句子下面加一条完整类名,覆盖上面的冲突。如果两个都要用,在程序里用完整的包名。
    还可以import静态方法和静态域: import static java.lang.System.*(或者out);之后可以使用out.println("");
     
    将类放入包中:package com.horstman.corejava
    不添加放置语句的类放入default 包中,被放入包的类有相同目录结构。如com/horstman/corejava下
    编译器编译时不检查包结构,运行时找不到包会出错
     
    jar相关:第十章
     
    4.8类路径 4.9 文档注释略
    4.10 类设计技巧
    一定保证数据私有(封装),一定要初始化,避免过多基本类型的使用。有的域不需要访问器修改器。
    职责过多的类进行分解。
    类名习惯:Order、RushOrder、BillingAdress。。。
    方法名习惯:getSalary,setSalary。。。
  • 相关阅读:
    jquery加入购物车飞入的效果
    jQuery点击div其他地方隐藏div
    移动对meta的定义
    ZOJ
    博弈dp入门 POJ
    ZOJ 2967计算几何+单调栈
    牛客训练41D最小相似度bfs
    球的体积并
    二进制上的数位dpPOJ 3252
    数位dp入门 HDU 2089 HDU 3555
  • 原文地址:https://www.cnblogs.com/CaptainLL/p/11555912.html
Copyright © 2011-2022 走看看