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。。。
  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/CaptainLL/p/11555912.html
Copyright © 2011-2022 走看看