Java 学习笔记

  1. 变量名第一个单词首字母小写,其余单词首字母大写

  2. java 区分大小写,price Price 是不同变量

  3. 变量名可以字母、下划线(_)、美元符号($)开头,其余不可。

  4. 数据类型:


  5. 自动类型转换满足特定条件:

    • 目标类型能与原类型兼容,如 double 可以兼容 int,但是 char 无法兼容 int
    • 目标类型大于原类型,如 double 类型长度为 8 字节,int 类型为 4 字节。所以 double 类型的变量可以直接存放 int 类型,但反过来不行。
  6. 强制类型转换:

    • 语法: (数据类型)数值
      double avg1=75.8;
      int avg2=(int)avg1;

    但注意,这种强制转换会直接截断小数位,造成数据丢失!

  7. 常量名一般是大写字符!

    • 单行注释://
    • 多行注释: /* 开头,*/ 结尾
    • 文档注释: /** 开头,*/ 结尾
  8. 比较运算符:

    • 、<、>=、<= 只能操作数值
      - ==、!= 可以操作数值类型,也可以操作引用类型

  9. 逻辑运算符:


短路现象:

  • ( one > two ) && ( one < three ) 中,如果能确定左边 one > two 运行结果为 false , 则系统就认为已经没有必要执行右侧的 one < three 啦。
  • 同理,在( one > two ) || ( one < three ) 中,如果能确定左边表达式的运行结果为 true , 则系统也同样会认为已经没有必要再进行右侧的 one < three 的执行啦!
  1. 条件运算符(?:)也称为三元运算符:

语法形式:
- 布尔表达式 ? 表达式1 : 表达式2

  1. 运算符优先级:

1 的优先级最高,11 的优先级最低


  1. 数组:

scores = new int[5]
names = new String[5]
int[] scores = new int[5];
int[] scores = {78,91,84,68}
int[] scores = new int[]{78,91,84,68}

  • 将数组排序:

Arrays.sort(scores);

  • 将数组转换成字符串:

Arrays.toString(scores);

  1. foreach for 语句的特殊简化版本

  2. void 表示如果方法不返回任何值,则任何值类型指定为 void;
    如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值。

  3. Java 中无参无返回值方法的使用:


  • 方法名主要主要命名的规范,一般采用第一个单词首字母小写,其他单词首字母大写。
  1. Java 中无参带返回值方法的使用:
  • 调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用返回值方法时一般都会接收其返回值并进行处理。


  1. Java 中带参无返回值方法的使用:


  2. Java 中带参带返回值方法的使用:


  3. 重载:

  • 如果一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载


    • static 使用之静态变量:
  • 被 static 修饰的成员称为静态成员或类成员。属于整个类所有。


  • 静态方法:

    • 静态方法可以直接调用同类中的静态成员(也可以用创建类的对象,通过对象来访问,推荐用类名调用的方式),不能直接调用非静态成员。
      如果希望在静态方法中调用非静态变量,通过对象来访问非静态对象

    • 普通成员方法中,则可以直接访问同类的静态和非静态变量

    • 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。


  1. 通过初始化块进行数据赋值:


静态初始化块只在类加载时后执行且只执行一次
静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

  • 程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
  1. 封装:


  2. 访问修饰符:


  3. 成员内部类:

    • 外部类不能直接使用内部类的成员和方法(可先创建内部类的对象,通过内部类的对象来访问)
    • 如果外部类和内部类具有相同的成员变量和方法,内部类默认访问自己的成员变量和方法,如果要访问外部类的成员变量,可以使用 this 关键字:
  4. 静态内部类:

    • 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
    • 创建静态内部类对象时,不需要外部类的对象,可以直接 内部类 对象名 = new 内部类()
  5. 方法内部类:

    • 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。


    • 注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符static 修饰符

  6. 重写:

语法规则:

  • 返回值类型
  • 方法名
  • 参数类型及个数
  • 这些都要与父类继承的方法相同,才叫重写
  1. 继承的初始化顺序:
    1. 初始化父类再初始化子类
    1. 先执行初始化对象中属性,再执行构造方法中的初始化
  1. final 关键字:


  2. super 关键字:

    • 在对象内部使用,可以代表父类对象。
      1. 访问父类属性 super.age
      1. 访问父类方法 super.eat()
    • 子类的构造过程当中必须调用其父类的构造方法
  3. Object类:如果没有继承父类,默认继承 Object 类

    1. toString() 方法:
    • 在 Object 类里面定义 toString() 方法的时候返回的对象的哈希 code 码(对象地址字符串)
    • 可以通过重写 toString() 方法表示出对象的属性
    1. equals() 方法:
    • 比较的时对象的引用是否指向同一块内存地址(一般情况下比较两个对象时比较她的值是否一致,所以要进行重写)
  1. 多态(继承时多态实现的基础):
  • 对象的多种多态:
      1. 引用多态:
    • 父类的引用可以指向本类的对象
    • 父类的引用可以指向子类的对象
      1. 方法多态:
    • 创建本类对象时,调用的方法为本类方法
    • 创建子类对象时,调用的方法为子类重写的方法或者继承的方法
  • 引用类型转换:
      1. 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换;
      1. 向下类型转换(强制类型转换),是大类型到小类型。会有数据溢出,有风险
      1. instanceof 运算符,来解决引用对象的类型,避免类型转换的安全性问题。
  1. 接口:










  2. Java 中的异常抛出:


  • 自定义异常:
class 自定义异常类 extends 异常类型{
}
  1. 字符串:
    String 类位于 java.lang 包,默认导入所有程序。
    1. 创建 String 对象的方法:


    1. String 的不变性:
      String 对象创建后便不能被修改,是不可变的。所谓的修改其实是创建了新的对象,所指向的内存空间不同
  • 运行结果:
    true
    false
    false
    欢迎来到:爱慕课

注意:

  1. 通过 String s1="爱慕课"; 声明了一个字符串对象, s1 存放了到字符串对象的引用。

    然后通过 s1="欢迎来到:"+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象
  2. 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder
  3. 每次new一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 false ,如果只需比较内容是否相同,应使用 equals() 方法
    1. String 常用方法:


  1. 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
  2. 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1
  3. 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符(类似于 Python 切片)
  1. StringBuilder 类:
  • StringBuilder 和 StringBuffer 类基本相似,不同之处在于 StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全的功能,所以性能略高
  • 一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder类。
  • 常用方法:



    在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。



  1. 包装类:


  • 包装类主要提供了两大类方法:
      1. 将本类型和其他基本类型进行转换的方法
      1. 将字符串和本类型及包装类互相转换的方法
  • 包装类的常用方法:


  1. 基本类型和包装类之间的转换:

JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱

  1. 基本类型和字符串之间的转换:
  • 基本类型转换成字符串的三种方法:
      1. 使用包装类的 toString()
      1. 使用 String 类的 valueOf()
      1. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
  • 字符串转换成基本类型有两种方法:
      1. 调用包装类的 parseXxx 静态方法
      1. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
  1. 使用 Date 和 SimpleDateFormat 类表示时间:
    1. 使用 format() 方法将日期转换为指定格式的文本
    1. 使用 parse() 方法将文本转换为日期:

注意

  • 1.调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理

    1. 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包
  1. Calendar 类的应用:
    (更推荐使用 Calendar 类进行时间和日期的处理)
  • java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
  • Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位
  1. Math 类操作数据:
    -常用方法:
  1. 集合与数组的对比:


  1. 泛型不能用基本类型,要用强制转换成包装类。

  2. Map 接口:


  1. HashMap 类:


  • Comparable 默认比较规则
  • Comparator 临时比较规则


  1. Java 集合框架:
  • Collection 接口
  • Collections 工具类
  • Map 接口
  • Comparator 接口
  • Comparable 接口
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务