《Core Java》总结——Day1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/imilano/article/details/79392140

1. 基本程序设计结构

  • java区分大小写
  • 命名规则:类名大写字母开头,每个单词第一个字母大写。
  • main方法必定是public
  • 数据类型:8中基本类型。

整形

数据类型 字节数
int 4字节
short 2字节
long 8字节
byte 1字节
  • 长整型有后缀L;二进制0b(0B)

浮点型

  • 二进制的浮点型无法准确计算
  • NaN(不是一个数字)
数据类型 字节数
float 4字节
double 8字节

* char类型
码点:与一个编码表中的某个字符对应的代码值

  • 变量

    关键字final表示之歌变量只能被赋值一次。
    static final:类常量,在一个类的多个方法中使用。
    null表示变量没有设置任何值。
    检测字符串是否想相等使用equals方法。
    ==检测的是两个字符串是否放在同一个位置上。如果虚拟机始终将相同的字符串共享,就可以使用==来检测是否相等。

    //  检测空串  
    if(lenth(a) == 0);
    //或者
    if(a.equals(""));
    //检测null串
    if(str == null);
    //检测既不是空串也不是null串
    if(str != null && str.length() != 0);  
     ```
    
     遍历字符串并查看码点:  
     ```java
     int[] codePoints=str.codePoints().toArray();  
     String str=new String(codePoints,0,codePoints.length());  
    
     ```
    
     * 大数值运算
    
     ```java    
     // BigInteger和BigDecimal实现处理任意长度数字序列的数值
     BigInterger b = BigInteger.valueOf(100);
     BigInteger nb = b.muliply(b.add()BigInteger.valueOf(50));     
     ```
    
    
    * 数组拷贝
    
    ```java
    int[] arr=new int[]{2,4,6};
    int[] newArray = Arrays.copyOf(arr,arr.length());

    java中的对象都是在堆中构造的,构造器总是伴随着new操作一起调用。
    Java程序设计语言总是按值调用:方法不能修改一个基本数据类型的参数,但是可以通过对象的引用修改对象的状态。

2. 对象与类

  • 类设计技巧
    • 一定要保证数据私有你。
    • 一定要对数据初始化。
    • 不要在鳄梨中使用过多的基本类型。
    • 不是所有的域都需要独立的域访问器和域修改器。
    • 将职责过多的类进行分解。
    • 类名和方法名要足够能体现自己的职责。
    • 优先使用不可变的类,避免线程不安全问题。

3. 继承

  • 使用super关键字调用构造器的语句必须是子类构造器的第一条语句。
  • 如果子类的额构造器没有显式的盗用超类的构造器,则将自动的嗲用超类默认的构造器。。
  • 多态和动态绑定。
  • 方法的名字和参数列表称为方法的签名。
  • 方法调用步骤(以x.f(arg)为例):

    • 编译器查看对象的声明类型和方法名。编译器会一一列举所有X类中名为f的方法和其超类中访问属性为public且名为f的方法。至此,编译器已经获得所有可能被调用的候选方法。
    • 接下来,编译器查看调用方法时提供的参数类型。如果所有名为f的方法中存在一个与提供的参数类型完全匹配的方法,则选择这个方法,这个过程称为重载解析。
      *上述过称为动态绑定。
      *如果是private 方法、static方法、final方法或者构造器,那么编译器可以准确的知道应该调用哪个方法,这种调用方式称为静态绑定。
    • 当程序运行并采用动态绑定方法时,虚拟机一定调用与x所引用对象的世纪类型最合适的那个类的方法。
    • 每次调用时都要进行搜索,开销过大,因此虚拟机预先为每个类创建了一个方法表,其中列出了素有方法的签名和实际调用的方法。在真正方法调用时,虚拟机查找这个表就可以了。

    • 阻止继承:final类和final方法:

    • final类:不允许扩展的类称为final类。final类中所有的方法自动变成final方法,但是类中的域并没有变为final域。
    • final方法:阻止继承,防止子类复写。

    • 强制类型转换

    • 只能在继承层次内进行类型转换。
    • 在进行类型转换前,使用instanceOf方法检测合法性。

    • 抽象类

    • 祖先类更加通用,定义抽象类并不是为了实例化,而是提供一个公用的实例接口,只是将他作为派生其他类的基类。
    • 包含一个或多个抽象方法的类必须被定义为抽象类。
    • 抽象类可以包含具体数据和实现方法。
    • 抽象类不能实例化。
    • final类中的所有方法都自动变为final方法。抽象类中的方法不一定全是抽象方法。

    • Object类:所有类的超类

    • equals方法,可重写。
    • hashcode方法,可重写。
      • hashcode定义在Object类中。
      • 字符串的散列码是由内容导出的。
      • 每个对象默认有一个散列码,其值为对象的存储地址。
      • hashcode与equals的定义必须一致:同true同false。
    • toString方法

      • 数组的toString使用Arrays.toString来获取数组字符串表示。
    • 可变参数方法

    • 形式: public void demo(int a,Object...args)
    • 上式的Object…args实际上是一个Object数组。
    • 枚举类
    • 枚举类比较值时,永远不需要调用equals方法,直接用==即可。
      *toString的逆方法是静态方法valueOf

    • 反射

    • *
      *
      *
      *

    • 继承的设计技巧

    • 将公共操作和域放在超类。
    • 不要使用受保护的域。
    • 使用继承实现“is a”关系
    • 除非所有继承的方法都有意义,否则不要使用继承。
    • 在覆盖方法时,不要改变预期的行为。
      *使用多态,而非类型信息。
      *不要过多的使用反射。

4. 接口、lambda和内部类

  • 接口要点

    • 接口中的所有方法自动属于public。
    • 接口中的域被自动设为public static final
    • 接口不能含有实例域和静态方法。可以将接口看成没有实例域的抽象类。
    • 接口可以包含常量。
    • 接口不是类,不能用new运算符实例化一个接口。
    • 接口变量必须引用实现了接口的类对象。
    • 用instanceOf检查一个对象是否实现了某个特定的接口。
    • 静态方法可以通过类名调用,也可以通过类的实例对象调用。静态方法只能访问类的静态属性,不能访问非静态属性。若要访问非静态属性,可以通过类对象访问。
    • 可以为接口提供一个默认实现(以default修饰符标识)。

    • 接口冲突:一个类扩展了一个超类同时实现了一个接口。方法冲突时:

      • 超类优先。优先考虑超类的方法。
      • 接口冲突。接口具有相同的方法时,编译器会报错,自己选择一个实现。

猜你喜欢

转载自blog.csdn.net/imilano/article/details/79392140