Day2:Java学习之二见
00 分钟
2024-9-8
2024-9-10
tags
date
type
status
slug
summary
category
password
icon

面向过程编程

  • 要注意Java对大小写特别严格 ,我们从基础的 “Hello World”代码就能看出
    • 程序的入口从 public static void main(String[] args) { } 开始的,也叫做Java程序的入口点
    • 和c语言那些一样,要注意的比如,换行分号,java中叫主方法,而c中叫主函数
    • 注释
      • 基本的一行 // 后面接要注释的内容
      • 如果内容较多,可以使用下面的方法
      • 还有种常见的是 文档注释
    • 变量与常量
      • 变量与常量,顾名思义,变量就是可以改变值的量,用非数字符号来表示,而常量就是不可改变的量
      • 变量的定义规则: [数据类型][变量名称] 变量名称不能以数字符号开头,只能以 字母开头+数字 or 下划线_ or 美元符号 $组成,不能有其他符号
      • 建议变量以能够理解,和实际作用相关的名称来命名
      • 不能与Java语言的关键字或者基本类型重名
        • tips:在IDEA中 关键字会高亮为橙色or深蓝色 一般你看到的在{ }前 不是你标注都得都是关键字
    • 基本数据类型
      • 在计算机中,用二进制表示所有内容,Java中所有数字都是有符号数,也就是说第一位为符号位,1为- 0为+
      • 原码 反码 补码
        • 原码就是你看到的这个数的二进制表示
        • 反码 —— 二进制数转换为负数时的中间步骤,不能直接理解成数值
          • 正数反码是它自己
          • 负数反码是将原码 符号位不变,其余按位取反 ,如 -6 1110,它的反码就是 1001
        • 补码表示具体数值
          • 正数补码是它本身
          • 负数补码 符号位不变,其余各位按位取反 再+1 (即反码基础上+1)如 -6 1110 反码为 1001 加1之后变成1010
            • 我们也可以对补码求它的补码得到原码(有点绕)
            • 如 -6的补码是 1010 那么它的反码为 1101 再求它的补码 1110,这个时候表示的就是-6了
      • 整数类型
        • byte 字节型 (8个bit,也就是1个字节)范围:-128~+127
        • short 短整形(16个bit,也就是2个字节)范围:-32768~+32767
        • int 整形(32个bit,也就是4个字节)最常用的类型:-2147483648 ~ +2147483647
        • long 长整形(64个bit,也就是8个字节)范围:-9223372036854775808 ~ +9223372036854775807
      • 可以将小的整数类型值传递给大的整数类型,这里会发生隐式转换,反之,报错
        • 对于long 我们得 long a =99899999999899999l 才行,后面接个l (小写或大写的L),也可以分割表示:int a = 1_00000_00000
      • 浮点类型
        • float 单精度浮点型 (32bit,4字节) 可以后面加个f进行定义 float f=9.9f
        • double 双精度浮点型(64bit,8字节)
      • 隐式类型转换规则:byte→short(char)→int→long→float→double

    面向对象基础

    • 类与对象
      • 我们在 定义一个类(人),然后进一步创建许多这个类(人)的实例对象(年龄、身高、体重等各种指标),就叫面向对象编程
      • 创建类 —— public class 类名{ } ,可以右键 src 目录 点击创建新的类
      • 调用如下
      • 类的对象在创建出来之后会有默认的初始值 0 或 null 或 false
    • 函数方法
      • 和c的一样 返回值类型 函数名称 (参数类型 参数名称)
      • int sum(int a,int b){ return a+b;}
    • 函数重载
      • 针对相同作用,但返回值和参数类型不同的情况 —— 函数名称相同,但是返回值和参数值不同
      • 如 两数相加
      • int sum(int a, int b){ return a + b;}​double sum(double a, double b){ //这里改变返回值和传入的参数值类型,进行函数重载 return a + b;}
    • 静态变量和静态方法
      • 先讲静态方法,静态方法属于类 而不是具体某个对象
      • static关键字声明变量或方法是静态的,那么通过这个类创建的所有对象,操作的都是同一个目标
      • 静态方法中的所有成员的值都是被共享的,比如你指定了 person 中的 name 为“张三” 那么你不管是通过 Person p1 = new Person(); 还是Person p2 = new Person();去访问使用这个name,最终输出的都是”张三“
      • 一般情况下,我们并不会通过一个具体的对象去修改和使用静态属性,而是通过这个类去使用:
        • 静态方法属于类,但是无法获取成员变量的值,只能访问静态变量,因此不能使用this 和 . 了
        • 静态代码块和静态变量的初始化类加载时首先执行,而普通代码块和构造方法在创建对象时才会执行
      • 包声明和导入(我也不太懂 —— 等我搞懂再来)
        • 对 各种各样的类 打包分类管理,命名规则尽可能是域名格式 如: baidu.com .用来分割文件夹
        • 导入全部包:import com.test.entity.*;
      • 访问权限
        • public:权限最高,谁都能访问
        • protected:可以通过继承访问不同包(父类)下的成员,但是不能访问不同包下的非继承关系(父类)成员
        • 默认:只能访问同个包里面的类
        • private:只能当前使用
      • 封装 —— 把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。
        • 为了保证变量的安全性,避免被外界随便修改 外部只需要知道这个方法什么作用,不管实现
        • 就是给自己的类成员上访问权限,一般设置为 private 之后,会创建一个函数来实现对这个变量的调用
      • 继承 —— 对一些有相同属性但是不完全一样的类,为了方便代码的使用,定义 子类 继承 父类,减少代码的重复定义
        • 子类只能调用父类的非私有成员
        • 标记为 final 的类不能被继承 public final class Person { }
        • 如果父类存在一个有参构造,子类也必须在构造方法中调用
        • 子类可以定义和父类同名的变量的,要访问父类,可以使用super 如: super.name
        • 检查 变量所引用的对象是否是对应类型或其子类 使用 instanceof 如:if(person instanceof Student)
        • 顶层Object类:所有的类默认继承自Object类
        • 方法的重写 —— 和方法重载不同,它是覆盖原有的方法实现,注意 在子类中重写时得按照父类的定义来写,在类前边加上注解@Override
          • 静态方法不支持重写,可以被继承
          • 如果父类方法为 private ,那么子类同样无法访问,但子类可以自己创造一个同名的方法使用
          • 子类中调用重写过的父类的方法,同样可以使用 super
          • 子类不能降低父类方法的访问性
      • 抽象类 —— 比类还要抽象 ,可以理解成 父类放了一个永远不会调用但是子类重写的方法,在子类中具体实现
        • 在创建一个抽象类里头再嵌套创建一个类,接着我们需要通过创建一个子类来继承那个类并完成具体实现
        • 抽象方法不能为private
      • 接口 比抽象类还抽象 —— 将类所具有的某些行为(一般是某个类的子类共有的方法)抽象出来
        • 只能使用接口中定义的方法和Object类的方法,无法使用类本身的方法和父类的方法
        • 接口支持向下转型
        • 接口可以同时实现多个,没有数量限制,可以继承其他接口
        • 接口不允许存在成员变量 和 成员方法,但是可以存在静态变量和静态方法
      • 浅拷贝和深拷贝
        • 浅拷贝只是复制值给对象,引用也只是那个地址(人在塔在,人亡塔忘)
        • 深拷贝时相当于将所有内容,全部拷贝为一个新对象(人在旗在,人亡旗存)
      • 枚举类
        • 让用户在给定的几个对象中选择,而非用户自己传入,如 让你选择 “吃饭 睡觉 学习” 而不是你传入“躺平 摆烂 打游戏”

      面向对象高级篇

      • 基本类型包装类
        • 结构:
          • 所有的能表示数字类型的关键字 都可以 将首字母大写,其他不变 进行作为一个包装类型来使用
          • 特出的两类:计算非常大的数的 BigInteger 和 精确浮点数的计算BigDecimal
        • 数组
          • 定义方法 推荐的是 类型[] 变量名称 = new 类型[数组大小];
        • 字符串
          • 两种创建方法 :
            • String str = "Hello World!";String str = new String("Hello World!");
            • 要注意,如果是使用双引号创建两个相同内容,不同名称的对象,实际上指向的还是同一个对象
            • 但是,如果使用 new String(" ");的方法,实际上会创建两个新的对象
          • 判断相等用equals
          • 对于String类 有很多简单快捷的操作方法
          • StringBuilder类
            • 它有很多操作,典型的就是字符串像python那样直接相加 “+”
          • 正则表达式
            • 东西太多了,随用随查
          • 内部类 是但不完全是类的嵌套 它是属于对象的 而非类的
            • 成员内部类(属于对象) 和 静态内部类 (属于类) 都可以在外部类之外实例化
            • 局部内部类 仅限于方法或代码块内使用。
            • 匿名内部类 是一种简化实现的工具,特别是用于实现接口或抽象类时。
          • Lambda表达式
            • 如果一个接口中有且只有一个待实现的抽象方法,那么我们可以将匿名内部类简写为Lambda表达式
            • 标准格式为:([参数类型 参数名称,]...) ‐> { 代码语句,包括返回值 }
            • 和匿名内部类不同,Lambda仅支持接口,不支持抽象类
            • 接口内部必须有且仅有一个抽象方法(可以有多个方法,但是必须保证其他方法有默认实现,必须留一个抽象方法出来)
          • 方法引用
            • 方法引用就是将一个已实现的方法,直接作为接口中抽象方法的实现(当然前提是方法定义得一样才行)
          • 异常
            • 无非就是 程序 或 编译异常
            • 抛出异常
            • 解决异常

          📎 参考文章

           
          上一篇
          Java 中国象棋 day1
          下一篇
          Day1:Java简单写写

          评论
          Loading...