tags
date
type
status
slug
category
summary
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仅支持接口,不支持抽象类
- 接口内部必须有且仅有一个抽象方法(可以有多个方法,但是必须保证其他方法有默认实现,必须留一个抽象方法出来)
- 方法引用
- 方法引用就是将一个已实现的方法,直接作为接口中抽象方法的实现(当然前提是方法定义得一样才行)
- 异常
- 无非就是 程序 或 编译异常
- 抛出异常
- 解决异常
📎 参考文章
- 作者:瑾墨
- 链接:https://www.gaoqilan.tech/Code/7ead5cb6-9ab1-452d-8366-72010fa5dd8c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。