JAVA -- 第一阶段总结1(Basic、OOP)

Basic

1.环境的安装

  • 安装JDK,并配置环境变量
    • 配置JAVA_HOME
    • 配置CLASS_PATH
    • 配置Path
    • 打开DOS窗口:java -version

2.Java语法基础

  • 标识符
    • 标识符可以由 字母,数字,下划线_,美元符号$组成
    • 不能包含@ % 空格 等其他特殊符号
    • 不能以数字开头
    • 严格区分大小写,尽量做到见名知意
  • 关键字
    • 一共有50个全小写的关键字,2个保留字const和goto
    • 关键字、true、false、null 也不能用作标识符
      在这里插入图片描述
  • 注释
    • 单行注释: //
    • 多行注释: /* */
    • 文档(doc)注释: /** */
  • 变量
    • 定义方式: 变量类型 变量名 = 变量值;
    • 局部变量: 方法里/局部代码块里,必须手动初始化/赋值
      • 作用域:当方法/局部代码块执行完毕,局部变量就会释放
    • 成员变量: 类里方法外,不用初始化,会自动赋予对应类型的默认值
      • 作用域:在整个类中生效,类消失,变量才会消失

3.数据类型

  • 基本数据类型
    • 默认值 (整型:byte short int 0 long 0L) (浮点型:float 0.0f double 0.0d) (字符型:char /u0000) (布尔型:Boolean false)
      八大基本数据类型
  • 引用数据类型
    • 默认值是null,存放的是地址

4.字面值规则

  • 整数类型字面值是 int
  • 浮点类型字面值是 double
  • byte ( -128~127) short char 三种比int小的类型,可以使用范围内的值直接赋值
  • 字面值后缀:L-long F-float D-double
  • 字面值前缀:0b - 二进制 0 - 八进制 0x - 十六进制 \u - char类型(属于16进制)

5.类型转换

类型描述

  • 小转大(隐式转换)直接转
  • 大转小(显式转换)强制转
    • 强转注意溢出问题:int i = 128; byte b = (byte)i; -->b打印出来是 -128

6.运算规则

  • 计算结果的数据类型与最大的类型一致
  • byte,short,char三种比int小的整数,运算时会先自动转换成int
  • 整数运算溢出
    溢出重置
  • 浮点数运算不精确
  • 进行类型转换时,浮点数会舍弃小数部分变为整数,32.7->32
  • boolean不参与类型转换
  • 浮点数的特殊值 Infinity 无穷大( 3.14/0 ) NaN (not a number) (0/0.0 或 0.0/0)

7.运算符

运算符

  • 位运算符
    • &:与,两位同时为1,结果才为1,否则结果为0
    • | :或,两个位都为0时,结果才为0
    • ^:异或,两个位相同为0,相异为1
    • ~:取反,0变1,1变0
    • <<:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
      • 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2
    • >>:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
      • 操作数每右移一位,相当于该数除以2
    • >>>:无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
      • 对于正数来说和带符号右移相同,对于负数来说不同

8.流程控制

  • 分支结构: if - else if - else
  • switch结构:switch - case - default
    • switch结构的变量:byte、short、int 、char、String
    • case可以有多个,需要加break跳出,否则会发生穿透现象
    • 如果在default前的case有break,则default不会执行
  • 循环结构:
    • for循环:for(开始条件 ; 循环条件 ; 更改条件) { 循环体 }
      • 一般用于明确知道循环次数的情况
    • 嵌套for循环:
      • 外层控制:行数/轮数
      • 内层控制:列数/每轮执行的次数
    • while循环 :while(循环条件){ 循环体 }
      • 先判断,符合调节再循环
    • do - while循环 : do{ 循环体 }while(循环条件)
      • 先执行一次,再判断(保证代码至少执行 一次)

9.方法

  • 定义格式:
    • 修饰符 返回值 方法名(参数列表){ 方法体 }
  • 方法如果有返回值,通过return 关键字返回,在哪里调用,返回到哪里
  • 方法的重载
    • 指在一个类中存在多个方法名相同,参数列表不同的方法

10.数组

  • 数组的创建
    • 动态创建: int[] a = new int[5];
    • 静态创建:int[] b = new int[]{1,2,3,4,5}; int[] c = {1,2,3,4,5};
  • 数组是一块连续的内存空间,一旦创建,不可改变
  • 数组创建的过程分析 ,以int[] a = new int[5];为例:
    • 在内存中开辟长度为5的连续空间,用来存放数据
    • 完成数组的初始化过程,给每个元素赋值,int的默认值是0
    • 初始化会为数组分配一个唯一的地址值
    • 将这个唯一的地址值交给引用类型的变量a去保存(数组名是一个引用类型的变量,他保存的是数组的地址,不是数组中的数据)
  • 数组的遍历:for(int i = 0 ; i < a.length ; i++) {...}
  • 数组工具类 Arrays
    • Arrays.toString(数组):除char类型数组外,其他类型的数组想要查看数据需要使用此方法
    • Arrays.sort(数组):对数组进行排序
    • Arrays.copyOf(数组,新的长度):把数组复制成一个指定长度的新数组 ,新数组的长度 > 原数组, 相当于复制,并增加位置 ;新数组的长度 < 原数组, 相当于截取一部分数据
  • 二维数组
  • int[][] a = {{1,2},{3,4},{5,6}};
  • 遍历
    	for (int i = 0; i < a.length; i++) {	//遍历外部数组
    		for (int j = 0; j < a[i].length; j++) {	//遍历内部数组
    			System.out.println(a[i][j]);	//依次打印二维数组中每个元素的值
    		}
    	}
    

面向对象OOP(Object Oriented Programming)

  • 三大特性: 封装、继承、多态

11.类和对象

  • 类:
    • Java语言最基本的单位是
    • 类是一类事物的抽象,用关键字class表示
  • 对象:
    • 对象的状态:用来描述对象的基本特征
    • 对象的行为:用来描述对象的功能
    • 对象的标识:指对象在内存中都有一个唯一的地址值用来和其他对象区分开来
    • 是根据抽象设计出来的具体事物,是具体的实现,用关键字new 来创建对象
    • 一个类可以创建出多个对象,这些对象各自都占有独立的内存空间

12.对象创建时的内存分析:

对象创建图片

  • 对象创建时的内存分析:
    • 1)Cat c = new Cat();–创建了普通对象
      • 1-在栈内存中开辟一块空间,存放引用类型的变量c,并把c压入栈底
      • 2-在堆内存中开辟一块空间,用于存放Cat类的对象
      • 3-完成对象的初始化,并根据属性类型赋予对应的默认值
      • 4-给初始化完毕后的对象生成一个唯一的地址值
      • 5-将对象唯一的地址值交给引用类型变量c来保存
      • 6-后续可以根据变量c中保存的地址值找到对应的对象,进行相关调用
    • 2)new Cat();–创建了匿名对象
      • 1-在堆内存中开辟一块空间,用于存放Cat类的对象
      • 2-完成对象的初始化,并根据属性类型赋予对应的默认值
      • 3-给初始化完毕后的对象生成一个唯一的地址值
      • 4-匿名对象没有名字,只能使用一次,所以调用情况如:new Cat().play();
      • 调用完毕,匿名对象就失去作用了,只适合只使用一次的场景

13.封装

  • 封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
    • 对资源的访问进行控制,私有资源只能在本类中访问
    • 私有资源为了能够正常使用,需要对外提供公共的接口
    • 好处: 提高安全性 、 提高重用性
  • 属性的封装:private ,被私有化的成员只能在本类中访问
    • 使用private关键字封装,并提供对应的get & set方法
  • 方法的封装:
    • private修饰方法
    • 可以在同类中的公共方法里调用这个私有方法
    • 这样就可以在其他类中,创建对象,调用公共方法
  • 访问控制符:
    在这里插入图片描述

14. 构造方法

  • 与类名同名且没有返回值类型的方法
    • 格式:修饰符 类名(参数列表){方法体}
    • 作用:专门用来创建对象的方法
    • 执行的时机:每次创建对象时,都会触发对应的构造方法,创建几次,触发几次
    • 默认存在无参构造,如果添加了含参构造,默认的无参构造会被覆盖,所以手动添加无参构造
  • 方法的重载:Overload
    • 在同一个类中,存在方法名相同但参数列表不同的方法
    • 构造方法也存在重载的现象:无参构造/含参构造/全参构造
      • 注意:全参构造能给对象的属性赋值的前提是要有赋值的语句
  • 构造代码块
    • 位置:类里方法外,与成员变量一致
    • 执行时机:创建对象时执行,优先于构造方法执行
    • 作用:用于提取所有构造方法的共性功能
  • 局部代码块
    • 位置:方法里,与局部变量一致
    • 执行时机:调用所在的方法时执行
    • 作用:用于控制变量的作用范围,变量的作用范围越小越好,出了代码就失效

版权声明:本文为Skyhaohao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。