java核心技术卷一 读书笔记

第三章 java基本程序设计结构

3.6字符串
  1.  提取子串substring方法:   s.substring(a,b)  第一个参数为开始复制的位置,第二个参数为不想复制的第一个参数
  2. 拼接                 1允许使用+号
                          2字符串与非字符串进行拼接,后者被拼接为字符
  1. 不可变字符串 不能修改Java字符串中的字符,不可变字符串的优点就是:编译器让字符串共享
  2. 检测字符串是否相等:使用equals方法或equalsIsIgnore方法  注意:不能使用==来判断,这个运算符只能确定两个字符串是否放置在同一位置上,完全有可能将相同内容的字符串放置在不同位置上。
  3. 代码点与代码单位:代码点:字符是最小文本单位,他的集合就是编码字符集,它为每一个字符分配一个唯一数字。而代码点就是指可用于编码字符集(Unicode码)的数字。
  3.7 输入输出
        3.7.3 
  •        Scanner in=new Scanner(File file) ;//构造一个从文件中读取数据的Scanner
  •       Scanner in =new Scanner(String string);//构造一个从字符串读取数据的Scanner
  •       PrintWriter out=new PrintWriter(String fileName);  //构造一个将数据写入文件的PrintWriter      
3.8 控制流程
  •        在java中不允许在嵌套的块中重定义一个变量,这与C++不同     
  •         java还提供一种带标签的break语句,用于跳出多重嵌套的循环语句,作用类似于goto语句 。注意:标签必须放在希望跳出的最外层循环之前,紧跟一个冒号     
  •       如果将continue语句用于for循环中,则会继续执行for循环的更新部分    
3.10 数组
     在c++中,java数组的声明 double[][]balances=new double[10][6];//java
     相当于:                                                 double**balances=new double*[10];//c++//分配了一个包含十个指针的数组

第四章  对象与类

 1    对象变量与对象之间的关系:必须要初始化对象变量使其引用某对象才可。
                                  Date deadline=new Date();//new操作符返回的也是一个引用
                                        java中Date birthday等同于C++中Date*birthday                                        如果把一个变量的值赋给另一个变量,则他们引用同一个值,在java必须使用clone方法获得对象的深拷贝2 在java中访问器方法与更改器方法没有明显区别
3 源文件名必须与public类(由main方法的类)的名字相匹配
4  java构造器总是伴随着new操作符进行的  如Employee employee=new Employee("Alan",28);     不能进行形如Employee nuber007("Alan",28);//C++,not java
    的操作
5  java无需担心定义内联方法,这些都是虚拟机的任务6 注意不要编写返回引用可变对象的访问器方法(C++也是这样),这样会破坏类的封装性7 类的方法可以访问类的所有对象的所有私有域8   java方法参数总是采用按值传递的方式
  •    总结一下java程序设计语言的方法参数的使用情况
  •      一个方法不能改变基本数据类型的参数
  •     一个方法可以改变一个对象参数的状态
  •     一个方法不能让对象参数引用一个新的对象(造成后两者的原因是java采取按值传递,而且对象参数本质上是一个引用,即对引用进行了复制,可以通过复制的引用     改变对象参数的状态,但不能改变其引用)
9 可以直接初始化类的实例域,但在C++中所有的实例域必须在构造器设置
10 如果一个构造器的第一个语句为形如this();则这个构造器将调用同一个类的另一个构造器11 标记为public部分可以被任意类使用,private只能被定义他们的类使用,如果没有指定,则这个部分(类,方法,变量)可以被同一个包的所有方法访问
12 命名类名一个良好习惯是采用一个名词,前面加以形容词修饰。

第五章 继承

1 java中所有的继承都是公有继承
2 在通过子类推展超类时,应把公共方法放置在超类,而仅在子类中定义具有特殊用途地方法
3 子类无法直接访问超类的私有域,故只能通过调用超类的方法来访问
4 置换法则 Manger boss=new Manager(...);
                   Employee[]staff=new Employee[3];
                  staff[0]=boss;
   这里staff[0]和boss引用同一个对象,但编译器将staff[0]看作是Employee对象,因而不能调用Manager类中的特殊方法   staff[0].setBonus(1000);//不行
   因此即使是超类变量引用子类对象,依然无法调用子类中特有的方法,只能实现在超类和子类共有的方法中的动态绑定
        解决方法:要想对其中的内容进行具体的操作,需要清楚对象的原始类型,数组元素向下强制转型,然后再调用某子类的特殊防腐
  4  java无需将方法声明为虚拟的,动态绑定是默认的处理方式(这点比C++要简单许多):动态绑定有一个非常重要的特性(优点),无需对现有代码进行修改就可对程序进行扩展。
5 java不支持多继承
6 超类变量可以引用子类对象,子类变量不能引用超类对象
7
  •  如果不允许利用某个类被扩展着(即是无子类),则可将该类声明为final。不过将一个类声明为final,只有其中的方法也随之成为final,但域没有
  •   类中的方法也可被声明为final,这样子类就不能覆盖这个方法。
8  强制类型转换
  •  只能在继承层次中进行转换
  •  将超类转换成子类之前应进行instanceof检查
9  通过abstrct方法声明抽象类(无论是否包含抽象方法),但有抽象方法的必须声明为抽象类。是否可以省略抽象超类Person的抽象方法getDescription()而仅在Employee和Student子类中定义getDescription()呢?如果这样就不能通过Person类变量来调用getDescription()方法了。 VIP: 编译器只允许调用在类中的方法(包括继承下来的和自己新声明的)10 事实上,java的受保护机制protected部分对所有子类及同一个包的其他类都可见,这与C++有所不同      总结java用于控制可见性的四个访问修饰符:
public------所有类可见
protected-------以上
private-------仅本类可见
默认-------对本包可见
11 getClass()方法返回一个对象所属的类    如何编写一个完美的equals方法:详见书172
12  散列码(has code)是由对象导出的一个整型值,没有规律,如果x和y不同对象,x.hashCode() 和y.hasCode()基本上不会相同。 如果重新定义equals方法,必须重新定义hashCode方法,以便用户可以将对象插入到散列表中。
13  toString方法,格式:类名,随后是一对方括号括起来的域值,只要一个对象与一个字符串通过一个+号连接,java就会自动调用toString方法,以便得到这个对象的字符串描述。同时println方法也会将对象调用toString方法,强烈建议为自己每一个类定义toString方法14  数组列表ArrayList管理着对象引用地一个内部数组,最终如果内部数组的空间被耗尽,则新建一个更大的数组,并将原来的对象拷贝到更大的数组之中。ArrayList有点像C++中vector模版,但没有[]运算符,使用get,set方法来实现访问和改变数组元素的操作。使用下面这个技巧既可以灵活扩展数组(C++劣势),又能方便的访问数组元素(C++优势)
             创建一个数组《并添加所有的元素
ArrayList <X>list=new ArrayList<>();
while(...)
{
X x=...;
list.add(x);
}
              使用toArray方法将数组元素拷贝到另一个数组之中
X[]a=new X[list.size()];
list.toArray(a);
              对数组实行插入和删除效率较低,对于大型数组来说应考虑使用链表15  编译器认可基本数据类型和包装器类的拆箱和装箱,并会自动进行这一步骤。 
16  参数量可变的方法 X function(X...values){}      X...values 与X[]差不多
17  枚举类 如 public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};  这个声明定义的是一个类,他刚好有4 个实例。在比较两个枚举类型的值时,使用==
     如果需要,可以在枚举类型中加入一些构造器,方法和域
package com;
 
public  enum  Color {
     
      RED( "红色" , 1), GREEN( "绿色" , 2), BLANK( "白色" , 3), YELLO( "黄色" , 4);
     
     
     private  String name ;
     private  int  index ;
     
     private  Color( String name , 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值