学习笔记——Java

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


Java基础语法

  • 第一个Java程序(HelloWorld.java)

    public class HelloWorld { // 公开类 
        public static void main(String []args) { // 程序入口
           System.out.println("Hello World");    // 标准输出
        }
    }
    
  • 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。

  • 类、对象、方法和实例

    • 类:类是一个模板,它描述一类对象的行为和状态。
    • 对象:对象是类的一个实例,有状态和行为。
    • 方法:方法就是行为。
    • 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
  • 基本语法

    • 大小写敏感
    • 类名大写
    • 方法名小写
    • 源文件名必须和类名相同
    • 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行
  • 标识符

    • 字母、美元符和下划线开始
    • 首字符之后可以是任何字符的组合
    • 不能使用关键字
    • 大小写敏感
  • 修饰符

    • 可访问:default, public , protected, private
    • 不可访问:final, abstract, strictfp
  • 变量

    • 局部变量
    • 类变量(静态变量)
    • 成员变量(非静态变量)
  • 数组

    • 数组可以存储多个同类型的变量。
  • 枚举

    • 枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。
  • 注释

    • 单行注释://
    • 多行注释:/*....*/
  • 继承

    • 一个类可以由其他类派生。利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。超类→子类。
  • 接口

    • 对象间相互通信的协议。
    • 接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。
  • 关键字
    | 关键字 | 描述|
    | ------------- |:-------------|
    |abstract| 抽象方法,抽象类的修饰符|
    |assert| 断言条件是否满足|
    |boolean| 布尔数据类型|
    |break| 跳出循环或者label代码段|
    |byte| 8-bit 有符号数据类型|
    |case| switch语句的一个条件|
    |catch| 和try搭配扑捉异常信息|
    |char| 16-bit Unicode字符数据类型|
    |class| 定义类|
    |const| 未使用|
    |continue| 不执行循环体剩余部分|
    |default| switch语句中的默认分支|
    |do| 循环语句,循环体至少会执行一次|
    |double| 64-bit双精度浮点数|
    |else| if条件不成立时执行的分支|
    |enum| 枚举类型|
    |extends| 表示一个类是另一个类的子类|
    |final| 表示一个值在初始化之后就不能再改变了。表示方法不能被重写,或者一个类不能有子类|
    |finally| 为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。|
    |float| 32-bit单精度浮点数|
    |for| for循环语句|
    |goto| 未使用|
    |if| 条件语句|
    |implements| 表示一个类实现了接口|
    |import| 导入类|
    |instanceof| 测试一个对象是否是某个类的实例|
    |int| 32位整型数|
    |interface| 接口,一种抽象的类型,仅有方法和常量的定义|
    |long| 64位整型数|
    |native| 表示方法用非java代码实现|
    |new| 分配新的类实例|
    |package| 一系列相关类组成一个包|
    |private| 表示私有字段,或者方法等,只能从类内部访问|
    |protected| 表示字段只能通过类或者其子类访问。子类或者在同一个包内的其他类|
    |public| 表示共有属性或者方法|
    |return| 方法返回值|
    |short| 16位数字|
    |static| 表示在类级别定义,所有实例共享的|
    |strictfp| 浮点数比较使用严格的规则|
    |super| 表示基类|
    |switch| 选择语句|
    |synchronized| 表示同一时间只能由一个线程访问的代码块|
    |this| 表示调用当前实例,或者调用另一个构造函数|
    |throw 抛出异常|
    |throws| 定义方法可能抛出的异常|
    |transient| 修饰不要序列化的字段|
    |try| 表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码|
    |void| 标记方法不返回任何值|
    |volatile| 标记字段可能会被多个线程同时访问,而不做同步|
    |while| while循环|

Java对象和类

  • Java支持以下概念:

    • 多态
    • 继承
    • 封装
    • 抽象
    • 类:类是一个模板,它描述一类对象的行为和状态。
    • 对象:对象是类的一个实例,有状态和行为。
    • 实例
    • 方法
    • 重载
  • 举例:定义类

    public class Dog{ // Dog类(模板)
       String breed;  // 实例变量(属性)
       int age;
       String color;
       void barking(){// 方法
       }
    }
    
  • 类变量:

    • 局部变量在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
    • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
    • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型
  • 构造方法

    • 构造方法的名称必须与类同名。
    • 一个类可以有多个构造方法。
    • 如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
  • 创建对象

    • 使用关键字new来创建一个新的对象。
    • 创建对象的步骤:
      • 声明:包括名称和类型。
      • 实例化:用new创建对象。
      • 初始化:调用构造方法初始化对象。
  • 访问实例的变量和方法

    • 运算符:.
/* 实例化对象 */
ObjectReference = new Constructor();
/* 访问其中的变量 */
ObjectReference.variableName;
/* 访问类中的方法 */
ObjectReference.MethodName();
  • 源文件声明规则

    • 一个源文件中只能有一个public类
    • 一个源文件可以有多个非public类
    • 源文件的名称应该和public类的类名保持
    • 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
    • mport语句放在package语句和类定义之间。
    • import语句和package语句对源文件中定义的所有类都有效。
  • Java包:用于对类和接口分类。

  • Import语句是用来提供一个合理的路径,使得编译器可以找到某个类。

基本数据类型

  • Java两大数据类型:

    • 内置数据类型
    • 引用数据类型
  • 内置数据类型

    • Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
    • 四种整数类型:byte、short、int、long。
    • 两种浮点型:float、double。
    • 一个布尔型:boolean (true、false)
    • 一个字符型:char (16 bits Unicode字符)
  • 引用类型

    • 类似于C++指针。
    • 引用类型指向一个对象,指向对象的变量是引用变量。
    • 对象、数组都是引用数据类型。
    • 所有引用类型的默认值都是null。
    • 一个引用变量可以用来引用与任何与之兼容的类型。
    • 例子:Site site = new Site("Runoob")
  • 常量

    • 使用final关键字修饰常量。
    • 一般用大写字母表示。
    • 常量前缀:八进制(0)和十六进制(0x)。
    • 字符串常量:"...."
    • 字符串常量和字符常量都可以包含任何Unicode字符。String a = "\u0001";

Java变量类型

  • 声明变量格式:type identifier [ = value][, identifier [= value] ...] ;
  • Java变量类型:
    • 局部变量
      • 声明在方法、构造方法或者语句块中;
      • 用完即毁;
      • 只在声明它的方法、构造方法或者语句块中可见;
      • 上分配;
      • 没有默认值,需要初始化。
    • 成员变量(实例变量)
      • 声明在一个类中,但在方法、构造方法和语句块之外;
      • 可以声明在使用前或者使用后;
      • 在对象创建的时候创建,在对象被销毁的时候销毁;
      • 访问修饰符可以修饰实例变量;
      • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。
      • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。
      • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
    • 类变量(静态变量)
      • 在类中以static关键字声明,但必须在方法构造方法和语句块之外。
      • 类只拥有类变量的一份拷贝。
      • 静态变量储存在静态存储区。
      • 静态变量在程序开始时创建,在程序结束时销毁。
      • 静态变量具有默认值。
      • 类变量被声明为public static final类型时,类变量名称必须使用大写字母。

Java修饰符

  • 分为2类:

    • 访问修饰符
    • 非访问修饰符
  • 访问修饰符

    • default,默认的,同一包内可见,不使用修饰符。
    • private,私有的,同一类内可见。
    • public,公有的,对所有类可见。
    • protected,受保护的,同一包和所有子类可见。
  • 基本知识

    • 类和接口不能声明为private。
    • Private访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
    • 私有访问类型的变量只能通过类中公共的getter方法被外部类访问。
    • public的类、方法、构造方法和接口能够被任何其他类访问。
    • 如果几个相互访问的public类分布在不同的包中,则需要导入相应public类所在的包。
    • Java程序的main() 方法必须设置成公有的,否则,Java解释器将不能运行该类。
    • protected的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。
  • 方法继承规则:

    • 父类中声明为public的方法在子类中也必须为public。
    • 父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。
    • 父类中声明为private的方法,不能够被继承。
  • 非访问修饰符

    • static,创建类方法和类变量。
    • final,inal修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
    • abstract,创建抽象类和抽象方法。
    • synchronized和volatile,用于线程编程。
  • 基本知识:

    • 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
    • 如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
    • 抽象类可以包含抽象方法和非抽象方法。
    • 抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。

Java运算符

  • 运算符分类:

    • 算术运算符
    • 关系运算符
    • 位运算符
    • 逻辑运算符
    • 赋值运算符
    • 其他运算符
  • 算术运算符

    • +、-、*、/、%、++、--
  • 关系运算符

    • ==/!=、>、<、>=、<=
  • 位运算符

    • 应用对象:字节型(byte)、字符型(char)、短整型(short)、整型、长整型。
    • &,按位与
    • |,按位或
    • ^,按位异或
    • ~,按位补,翻转每一位
    • <<,按位左移
    • ,按位右移

    • ,按位右移补零

  • 逻辑运算符

    • &&、||、!
  • 赋值运算符

    • =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
  • 条件运算符(?:)

    • variable x = (expression) ? value if true : value if false
  • instanceOf

    • 检查该对象是否是一个特定类型(类类型或接口类型)
  • 运算符优先级
    这里写图片描述

Java循环结构

  • 三种循环结构:

    • while
    • do…while
    • for(主要用于数组)
  • while

    • 最基本循环
    while( 布尔表达式 ) {
    	//循环内容
    }
    
  • do…while

    • 至少执行一次
    do {
           //代码语句
    }while(布尔表达式);
    
  • for

    • for循环执行的次数是在执行前就确定的
    for(初始化; 布尔表达式; 更新) {
        //代码语句
    }
    
  • 增强for循环

    • 主要用于数组
    for(声明语句 : 表达式)
    {
       //代码句子
    }
    
  • break

    • 跳出一层循环和switch语句块
  • continue

    • 跳过一次循环

Java分支结构

  • 2种分支结构:

    • if…else…
    • switch
  • if

    if(布尔表达式)
    {
       //如果布尔表达式为true将执行的语句
    }
    
  • if…else…

    if(布尔表达式){
       //如果布尔表达式的值为true
    }else{
       //如果布尔表达式的值为false
    }
    
  • if…else if…else

    if(布尔表达式 1){
       //如果布尔表达式 1的值为true执行代码
    }else if(布尔表达式 2){
       //如果布尔表达式 2的值为true执行代码
    }else if(布尔表达式 3){
       //如果布尔表达式 3的值为true执行代码
    }else {
       //如果以上布尔表达式都不为true执行代码
    }
    
  • 嵌套的if…else

    if(布尔表达式 1){
       如果布尔表达式 1的值为true执行代码
       if(布尔表达式 2){
          如果布尔表达式 2的值为true执行代码
       }
    }
    
  • switch

    • 判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
    • switch语句中的变量类型只能为byte、short、int或者char。
    switch(expression){
        case value :
           //语句
           break; //可选
        case value :
           //语句
           break; //可选
        //你可以有任意数量的case语句
        default : //可选
           //语句
    }
    

Number类

  • Java语言为每一个内置数据类型提供了对应的包装类。

  • 所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。

  • 由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number类属于java.lang包。

  • 区分:内置数据类型和对象?

    Integer x = 5;
    

Character类

  • 用于对单个字符进行操作。

  • Character 类在对象中包装一个基本类型 char 的值。

  • 需要使用对象,而不是内置数据类型的情况。

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

  • 用于获取有关对象的信息的方法称为访问器方法。

    Character ch = 'a';
    

String类

  • 在Java中,String属于对象。

  • 创建字符串:String greeting = "Hello world!";

  • 方法:

    • 字符串长度:str.length()
    • 连接字符串:str.concat()、str1+str2
    • 创建格式化字符串
      • printf()
      • format()
      • String类的静态方法format()能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
    System.out.printf("浮点型变量的的值为 " +
                      "%f, 整型变量的值为 " +
                      " %d, 字符串变量的值为 " +
                      "is %s", floatVar, intVar, stringVar);
    // or
    String fs;
    fs = String.format("浮点型变量的的值为 " +
                       "%f, 整型变量的值为 " +
                       " %d, 字符串变量的值为 " +
                       " %s", floatVar, intVar, stringVar);
    System.out.println(fs);         
    

StringBuffer和StringBuilder

  • 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。

  • StringBuilder的方法不是线程安全的(不能同步访问),这一点和StringBuffer不同。

  • StringBuilder有速度优势,一般使用它。当程序要求线程安全时,必须使用StringBuffer。

    public class Test{
        public static void main(String args[]){
           StringBuffer sBuffer = new StringBuffer(" test");
           sBuffer.append(" String Buffer");
           System.out.println(sBuffer);  
       }
    }
    

Java数组

  • Java数组是用来存储固定大小的同类型元素。

  • 声明数组变量:

    dataType[] arrayRefVar;   // 首选的方法
    //或
    dataType arrayRefVar[];  // 效果相同,但不是首选方法
    
  • 创建数组(new)

    arrayRefVar = new dataType[arraySize];
    // 1. 使用dataType[arraySize]创建了一个数组。
    // 2. 把新创建的数组的引用赋值给变量 arrayRefVar。
    
  • 创建数组和声明数组变量

    dataType[] arrayRefVar = new dataType[arraySize];
    dataType[] arrayRefVar = {value0, value1, ..., valuek};
    
  • 处理数组

    • 数组元素类型和大小都是确定的,通常使用基本循环或foreach循环。
    • foreach循环或者加强型循环,它能在不使用下标的情况下遍历数组。
    • 数组可以作为参数传递给方法。
    • 数组作为函数的返回值。

Java日期时间

  • java.util包提供了Date类来封装当前的日期和时间。
  • Date类提供两个构造函数来实例化Date对象。
    • 第一个构造函数使用当前日期和时间来初始化对象。
    • 第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

Java正则表达式

  • Java正则表达式

    • 正则表达式定义了字符串的模式。
    • 正则表达式可以用来搜索、编辑或处理文本。
    • Java正则表达式和Perl的是最为相似的。
    • java.util.regex包主要包括以下三个类:
      • Pattern类:pattern对象是一个正则表达式的编译表示。
      • Matcher类:Matcher对象是对输入字符串进行解释和匹配操作的引擎。
      • PatternSyntaxException类:PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
  • 捕获组

    • 捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

Java方法

  • System.out.println()

    • System:系统类
    • out:标准输出对象
    • println():方法
  • 方法的定义:

    修饰符 返回值类型 方法名 (参数类型 参数名){
        ...
        方法体
        ...
        return 返回值;
    }
    
  • 方法调用:

    • 根据是否返回值,分为2种:
      • 方法返回一个值的时候,方法调用通常被当做一个值。
      • 如果方法返回值是void,方法调用一定是一条语句。

Java Stream、File、IO

  • Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

  • Java.io包中的流支持很多种格式。

  • 一个流可以理解为一个数据的序列。

  • 读取控制台输入

    BufferedReader br = new BufferedReader(new 
                          InputStreamReader(System.in));
    //从控制台读取单字符
    char c = br.read();
    //从控制台读取字符串
    String str = br.readLine();
    
  • 控制台输出

    • 控制台的输出由 print( ) 和println( )完成。这些方法都由类PrintStream 定义,System.out是该类对象的一个引用。
    • PrintStream 继承了OutputStream类,并且实现了方法write()。这样,write()也可以用来往控制台写操作。

参考:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值