【无标题】

day1(7.19)

一. 阶段一 JavaSE基础

#第一章. JAVA基础语法

1-1.java概述

JRE 和 JDKF

JRE : JRE是 Java Runtime Environment  缩写,指Java运行环境,包含 JVM 虚拟机及 Java 核心类库。
类 :java 文件在代码中的集合体现
类库:存放多个 java 文件的仓库

###JDK、JRE 和 JVM 的关系

image-20220725192934930

JDK的安装目录

image-20220725193109294

1-2. 第一个java程序

常用 DOS 命令

image-20220725193320459

Path 环境变量的配置

  • 为什么要配置环境变量

    作用:能够在任意目录(文件夹路径)下, 都能访问到bin目录中的javac和java工具
    

###HelloWorld

  • public : 目前可以看到的效果是,起到限制作用,要求文件名和类名称保持一致, 且一个文件中可以出现多个类, 但只有一个能被public修饰.

1-3. 基础语法

###常量分类

image-20220725193923882

数据类型内存占用和取值范围

image-20220725194102961

###变量的注意事项

  • 变量的作用域在定义变量时的大括号内
* 变量名不允许重复定义
* 一条语句可以定义多个变量
* 变量在使用之前一定要进行赋值
* 定义float和long变量的注意事项
* 变量的作用域范围

标识符

  • 常见命名约定

    image-20220725194500772

类型转换

  • 隐式转换
* 小的数据类型,和大的数据类型运算,小的会提升为大的之后,再进行运算
* 特殊关注:byte short char 三种数据在运算的时候,不管是否有更高的数据类型,都会提升为int,然后再进行运算

image-20220725194724524

  • 强制转换
注意:强制类型转换,有可能会发生精度损失

day2(7.20)

1-4. 运算符

算术运算符

  • 当(byte short char int)在一起运算的时候,都会提升为int之后,再进行运算
  • char提升为int的过程,就是查找码表中,字符所对应的数值表示形式

赋值运算符

image-20220725195542341

###关系运算符

  • 关系运算符的结果都是boolean类型,要么是true,要么是false。
  • 千万不要把“==”误写成“=”。

逻辑运算符

image-20220725195744496 image-20220725195815903

三元运算符

image-20220725195919221

1-5. 分支语句

switch语句

image-20220725200420476
注意事项:
* case给出的值不允许重复
* case后面的值只能是常量,不能是变量
  • case穿透现象
* 注意:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象
* 当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行,直到看见break,或者将整体switch语句执行完毕,才会结束。
*应用场景:当发现switch语句中,多个case给出的语句体出现了重复的,就可以考虑使用case穿透来优化代码。
image-20220725204619255

day3(7.22)

1-6. 循环语句

while循环语句格式

image-20220725205114482

do…while循环语句

image-20220725205149994

三种循环的区别

  • 三种循环的区别:
* for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
* do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断
  • for和while的区别:
* 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
* 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
  • 死循环格式:
for(;;) { }	
while(true) { }	
do{ }while(true);

while的死循环格式是最常用的
命令提示符窗口中Ctrl+C可以结束死循环

跳转控制语句

  • continue 用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
  • break 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

Random

image-20220725205615240

day4(7.23)

1-7. 数组

动态初始化

  • 范例: int [ ] arr = new int[3];

Java中内存分配

栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中
堆内存:new出来的内容都会进入堆内存,并且会存在地址值
方法区:字节码文件(.class文件)加载时进入的内存
本地方法栈:调用操作系统相关资源
寄存器:交给CPU去使用
  • 数据类型默认值
image-20220725210158473
  • 引用数据类型:引用、记录了地址值的变量,所对应的数据类型,就是引用数据类型

静态初始化

  • 范例: int [ ] arr = new int[ ] { 1 , 2 , 3 } ;

  • 范例: int [ ] arr = { 1 , 2 , 3 } ;

day5(7.25)

##1-8. 方法

###方法调用过程

  • 方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储

  • 方法被调用的时候,需要进入到栈内存中运行

image-20220725184951068

###带参数方法的定义和调用

形参和实参
形参:全称形式参数,是指方法定义中的参数
实参:全称实际参数,方法调用中的参数

带返回值方法的定义和调用

方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错

方法的注意事项

* 方法不能嵌套定义
* 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写
  如果要编写return,后面不能跟具体的数据。
* return语句下面,不能编写代码,因为永远执行不到,属于无效的代码

方法的参数传递

  • 对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
  • 对于引用类型的参数,形式参数的改变,影响实际参数的值
  • 所以, 利用这一点, 基本不需要返回引用数据类型

day6

1-9. Debug&位运算&二维数组

image-20220726111609987

  • debug过程中if语句中的括号的布尔值可以把鼠标放上去查看

  • debug中遇到键盘录入时, 需要录入, 不然会卡住

二维数组

  • 动态初始化

    * 格式1:数据类型[][] 变量名;
    * 格式2:数据类型 变量名[][];
    * 格式3:数据类型[] 变量名[];
    
  • 静态初始化

    * 格式:数据类型 [][] 变量名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}};
    * 简化格式:数据类型 [][] 变量名 = {{元素1,元素2},{元素1,元素2}};
    或
    * int arr[][] = {arr1,arr2,arr3}
    
  • 二维数组的遍历

image-20220726182046366

进制

  • 不同进制的书写格式

    * 十进制:Java中,数值默认都是10进制,不需要加任何修饰。
    * 二进制:数值前面以0b开头,b大小写都可以。
    * 八进制:数值前面以0开头。
    * 十六进制:数值前面以0x开头,x大小写都可以。
    

    注意:以上内容是jdk7版本之后才被支持。

进制转换
  • 任意进制到十进制的转换

    * 公式:系数 * 基数的权次幂 相加
    
    系数:每一【位】上的数
    基数:几进制,就是几
    权:从数值的右侧,以0开始,逐个+1增加
    
  • 进制到任意进制的转换

    * 公式:除基取余
    
    使用源数据,不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可
    
源码反码补码

强转过后,都是补码状态

  • 原码反码补码介绍

    注意:计算机中的数据,都是以二进制补码的形式在运算,而补码则是通过反码和原码推算出来的。
    
  • 源码(可直观看出数据大小)

    * 原码(可直观看出数据大小)
    就是二进制定点表示法,即最高位为符号位,【0】表示正,【1】表示负,其余位表示数值的大小。
    通过一个字节表示+7和-7,代码:byte b1 = 7;   byte b2 = -7;
    一个字节等于8个比特位,也就是8个二进制位
    	0(符号位)	0000111
     	1(符号位)	0000111
    
  • 反码

    * 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
    
  • 补码(数据以该状态进行运算)

    * 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
    * 也可以通过补码反向推导源码
    

###位运算

位运算符指的是二进制位的运算,先将十进制数转成二进制后再进行运算。

在二进制位运算中,1表示true,0表示false。

  • 位运算符介绍
image-20220726190544499
  • & 位与 : 遇false则false, 遇0则0

    00000000 00000000 00000000 00000110 // 6的二进制

    & 00000000 00000000 00000000 00000010 // 2的二进制
    00000000 00000000 00000000 00000010 // 结果: 2

  • | 位或 : 遇true则true, 遇1则1

  • ^ 位异或 : 相同为false, 不同为true

    * 异或运算的特点
    * 一个数,被另外一个数,异或两次,该数本身不变。
    

image-20220730114323692

  • ~ 取反 : 全部取反, 0变1, 1变0 (也包括符号位)

    00000000 00000000 00000000 00000110         // 6的二进制补码
    

    ~ 11111111 11111111 11111111 11111001

    •                               1         // -1求反码
      

    11111111 11111111 11111111 11111000         // 反码推原码
      
    10000000 00000000 00000000 00000111         // -7
    
位移运算符
  • << : 有符号左移运算,二进制位向左移动, 左边符号位丢弃, 右边补齐0

    运算规律: 向左移动几位, 就是乘以2的几次幂

                               12 << 2
       
                               (0)0000000 00000000 00000000 000011000  // 12的二进制
    
  >>: 有符号右移运算,二进制位向右移动, 使用符号位进行补位运算规律: 向右移动几位, 就是除以2的几次幂                           
  						000000000 00000000 00000000 0000001(1)  // 3的二进制
  • >>> 无符号右移运算符,  无论符号位是0还是1,都补0
                                    010000000 00000000 00000000 00000110  // -6的二进制
    (h)
    

day7

#第二章. 面向对象基础

2-1. 类与对象

  • 面向对象和面向过程的思想对比
面向过程:是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的
面向对象:是一种以对象为中心的编程思想,通过指挥对象实现具体的功能
  • 垃圾回收
注意:当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的“垃圾”
垃圾会被Java垃圾回收器,空闲的时候自动进行清理
  • 什么是成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量

###成员变量和局部变量区别

区别成员变量局部变量
类中位置不同类中方法外方法内或者方法声明上(形参)
内存中位置不同堆内存栈内存
生命周期不同随着对象的存在而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同有默认的初始化值没有默认的初始化值,必须先定义,赋值,才能使用

##2-2 关键字及构造方法

private关键字

是一个权限修饰符
可以修饰成员(成员变量和成员方法)
被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
    提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
    提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

this关键字

  • 局部变量和成员变量如果重名,Java使用的是就近原则

  • this关键字的作用:可以调用本类的成员(变量, 方法), 解决局部变量和成员变量的重名问题

当方法内局部变量和成员变量重名的时候,必须使用this进行区分,如果没有出现重名的现象,可以省略this不写!
  • this:代表所在类的对象引用, 记住:方法被哪个对象调用,this就代表哪个对象
this相当于汉字"我",this表示当前对象,哪个对象正在调用方法,那么这个方法内的this表示的就是那个对象;

###封装

隐藏实现细节,仅对外暴露公共的访问方式
  • 封装常见的体现:
1、私有成员变量,提供setXxx和getXxx方法
2、将代码抽取到方法中,这是对代码的一种封装
3、将属性抽取到类当中,这是对数据的一种封装
  • 封装的好处:
1、提高了代码的安全性
2、提高了代码的复用性

构造方法

  • 构造方法的注意事项
构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法

构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

推荐的使用方式
无论是否使用,都手动书写无参数构造方法,和带参数构造方法

day8

#第三章. API基础

  • API
应用程序编程接口;可以简单一点理解就是别人提前写好的代码!
  • api文档
为了方便程序员使用别人提前准备好的api,通常api都会有一个对应的api文档,api文档相当于是一套代码的使用说明书;

Scanner

    next() : 遇到了空格, 就不再录入数据了
            结束标记: 空格, tab键
    nextLine() : 可以将数据完整的接收过来
            结束标记: 回车换行符
            nextLine不建议和其他方法一块使用

* nextInt和nextLine方法配合使用的时候, nextLine方法就没有键盘录入的机会了
* 建议: 今后键盘录入数据的时候, 如果是字符串和整数一起接受, 建议使用next方法接受字符串.

3-1 String常用方法

###String概述

* String 类在 java.lang 包下,所以使用的时候不需要导包. lang包下不需要导包

* String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例
也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象

* 字符串不可变,它们的值在创建后不能被更改(不可变性)
  • String字符串的特点
* Java 程序中所有的双引号字符串,都是 String 类的对象
* 字符串不可变,它们的值在创建后不能被更改
* 虽然 String 的值是不可变的,但是它们可以被共享

String类常见构造方法:

		public String() : 创建一个空白字符串对象,不含有任何内容
        public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
        public String(String original) : 根据传入的字符串内容,来创建字符串对象
        String s = “abc”;  直接赋值的方式创建字符串对象,内容就是abc
     注意:
        String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址, 而是该对象所记录的真实内容.

        面向对象-继承, Object类

创建字符串对象的区别对比

内存图视频请见–阶段一 JavaSE基础: 3-1-05 创建字符串对象的区别对比

  • 构造方法能创建对象,双引号也能创建字符串对象,有什么区别吗?
* 以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,
	JVM 都只会建立一个 String 对象,并在字符串常量池中维护
* 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
* 双引号创建的字符串对象,在字符串常量池中存储,通过构造方法创建的字符串对象,在堆内存中存储
* 字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
    不存在:创建
    存在:不会重新创建,而是直接复用
* 注意:字符串常量池在JDK7版本开始从方法区中挪到了堆内存

image-20220729183548199

  • 一个加号,堆内存中俩对象

image-20220729183643641

字符串的比较

  • 使用 == 做比较

     基本类型:比较的是数据值是否相同
     引用类型:比较的是地址值是否相同
    
  • 字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()

String常用方法

image-20220729183907050 image-20220729184148331
* toUpperCase: 转大写
* toLowerCase: 转小写
* 找索引:
	indexOf(""): 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
	lastIndexOf(""): 返回指定字符在此字符串中最后一次出现处的索引。
* boolean startsWith(String prefix, int toffset) 
          测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 
* boolean endsWith(String suffix) 
          测试此字符串是否以指定的后缀结束。 
  • 对字符串的切分
    空白字符串(长度为0的字符串)留头不留尾, 前面有的话会留下一个长度为0的字符串;
    如果以点为分割的时候,需要写成 \\. 即可

##3-2 StringBuilder

StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器

* StringBuilder和String的区别:
    String :内容是不可变的
    StringBuilder:内容是可变的
  • 作用:提高字符串的操作效率, 同时还提供了一些字符串的简单操作;(例如字符串反转)

###构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

常用方法

方法名说明
public StringBuilder append (任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
public int length()返回长度 ( 字符出现的个数)
public String toString()通过toString()就可以实现把StringBuilder转换为String
  • StringBuilder提高效率原理图

内存图请见: 阶段一 JavaSE基础 3-2-18

StringBuilder 和 String 相互转化

  • 为什么要将String转成StringBuilder?
答: 因为如果想对字符串进行拼接,或反转,Sting自身拼接效率低,且没有反转的功能,而StringBuilder拼接效率高,且可以反转,所以此时需要将String转成StringBuilder再
  • 为什么要将StringBuilder转成String?
答: 因为StringBuilder没有比较内容是否相同的功能,如果需要比较两个字符串的内容是否相同,需要使用STring的equals方法才能完成!
  • StringBuilder 转换为 String
public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
  • String 转换为 StringBuilder
 public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

day9

##3-3 集合的常用方法

ArrayList

  • ArrayList构造方法和添加方法
方法名说明
public ArrayList()创建一个空的集合对象
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
  • ArrayList集合常用方法
方法名说明
public boolean remove(Object o)删除指定的元素(只能删除第一个),返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数

###ArrayList案例

  • 案例:集合删除元素
需求:创建一个存储String的集合,内部存储(test,张三,李四,test,test)字符串
	删除所有的test字符串,删除后,将集合剩余元素打印在控制台
思路:
    1.创建集合对象
    2.调用add方法,添加字符串
    3.遍历集合,取出每一个字符串元素
    4.加入if判断,如果是test字符串,调用remove方法删除
    5.打印集合元素
为什么不用remove方法?
	remove方法只能删除第一个

正向遍历配合i- - , 逆向遍历可以不需要

学生管理系统

  • 删除/修改学生学号不存在问题
思路:定义一个方法,该方法用于从集合中,查找【学号】在【集合】中出现的索引位置
public static int getIndex(ArrayList<Student> list, String sid) {
    ...
}
	学号存在:返回正确的索引位置
	学号不存在:返回 -1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值