最精炼的Java学习笔记

本文深入讲解Java中的String、StringBuffer、StringBuilder类的使用,探讨面向对象的继承、封装、多态概念,以及Java高级编程技巧如Maven依赖管理和多线程实现。同时,介绍了Java中的抽象类和抽象方法,以及如何正确实现方法的重写和重载。

Java String类

作用:创建和操作字符串
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了如果需要对字符串做很多修改,那么应该选择使用StringBuffer & StringBuilder 类。String类是final类,不能被继承

常用方法

String.length()

返回字符串对象包含的字符数

string1.concat(string2)

连接两个字符串(更常用的是使用’+'操作符来连接字符串)

String.format

格式化输出

其它String类支持的方法

Java String API

Java StringBuffer 和 StringBuilder 类

对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

类方法

StrinfBuffer类方法

Java面向对象

继承

class 父类 {
}
class 子类 extends 父类 {
}
Java 不支持多继承,但支持多重继承

关键字

继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

extends

在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类

implements

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

super 与 this

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类
this关键字:指向自己的引用

final

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final

instanceof

测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

构造器

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
代码示例

多态

多态就是同一个接口,使用不同的实例而执行不同操作
多态存在的三个必要条件:

  1. 继承
  2. 重写
  3. 父类引用指向子类对象

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

虚函数

虚函数的存在是为了多态。
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数

重写(Override)与重载(Overload)

重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:
父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常

注:在编译阶段,只是检查参数的引用类型。Animal b = new Dog() <=> Dog b = new Dog()

子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型
被重载的方法可以改变访问修饰符
被重载的方法可以声明新的或更广的检查异常
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。

总结:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现
是不是更加形象了!

抽象类

abstract class{
abstract void function();
}
抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

抽象方法

声明抽象方法会造成以下两个结果:

  1. 如果一个类包含抽象方法,那么该类必须是抽象类。
  2. 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。

封装

在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

实现Java封装的步骤

  1. 修改属性的可见性来限制对属性的访问(一般限制为private)
  2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
    private String name;
    private int age;public int getAge(){
      return age;
    }public String getName(){
      return name;
    }public void setAge(int age){
      this.age = age;
    }public void setName(String name){
      this.name = name;
    }
}

注:采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

以上实例中public方法是外部类访问该类成员变量的入口。通常情况下,这些方法被称为getter和setter方法
因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法

Java高级编程

Maven

Java构造工具之一,无需人工导包。

依赖文档收集



<properties>

       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

       <maven.compiler.encoding>UTF-8</maven.compiler.encoding>

       <java.version>1.8</java.version>

       <maven.compiler.source>1.8</maven.compiler.source>

       <maven.compiler.target>1.8</maven.compiler.target>              

</properties>
 

<dependencies>

   <dependency>

       <groupId>org.apache.commons</groupId>

       <artifactId>commons-math3</artifactId>

       <version>3.6.1</version>

  </dependency>

  <dependency>

       <groupId>com.github.houbb</groupId>

       <artifactId>opencc4j</artifactId>

       <version>1.0.2</version>

 </dependency>

</dependencies>

Junit

想测试哪个方法,就在方法上写@Test,记得import org.junit.Test,这样就不用写main()

Java多线程

多线程实现

继承Thread类,实现Runnable接口,通过start方法调用run方法,线程run结束后,线程退出。

一些package

com.github.houbb.opencc4j.util.ZhConverterUtil(简体转繁体)
org.apache.commons.math3.util.ArithmeticUtils(求最大公约数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值