个人笔记(JavaSE基础)

javaSE

1.1计算机组成部分

主要组成:硬件,软件

硬件:可以看见的物理部分,电子元件

​ 常见硬件:cpu,内存,显卡,存储设备,输入输出设备,网络设备

软件:指令组合,控制硬件工作

1.2计算机交互方式

命令行操作方式CMD窗口:操作复杂,命令较多,不容易上手,步骤简单,占用空间小,适合远程

图形化界面操作方式:操作简单,表现直观,容易上手,步骤繁琐,占用空间大

常用dos命令:

​ c:进入C盘根目录

​ d:进入D盘根目录

​ cd xxx:进入xxx目录

​ dir 查看当前目录下有的文件和目录

​ cd / 进入到当前所在盘符根目录

​ cd … 返回上级目录

​ cls 清屏

​ exit 退出cmd窗口

1.3计算机语言

物理硬件之间用电信号沟通,高低电压-二进制数据

机器语言

汇编语言

​ 通过一些单词(助记符),将一些常用操作用单词表示,将助记符转换为二进制给计算机,转换工具 汇编器。计算方式依赖于计算机的计算方式

高级编程语言

​ 第一个众所周知的:c语言–>c+±->java语言–>c# Python

​ 完全由单词符号数字组成,书写流程符合人类流程

​ 转换形式 编译,解释

​ 编译:将源代码全部进行编译 生成一个可执行的二进制文件 计算机去执行这个二进制文件来运行程序

​ 解释:逐行

​ 静态编译语言:c c++ java

​ 在定义变量时有数据类型区分

​ 动态编译语言:python js

​ 在定义数据类型无明确区分

1.4软件与软件开发

​ 软件:一系列按照特定顺序组织的计算机数据与指令的集合

​ 软件:用编程去解决一个问题的时候,先去获取该问题所需要的数据,然后再根据数据讨论计算的具体流程,最后再用编程语言去实现这个计算的流程

​ 软件分类:

​ 系统软件:(操作系统)控制管理底层硬件的一套指令,为用户提供基本功能

​ 应用软件:基于系统软件之上的,为用户带来特定的领域服务的软件

软件开发流程:

​ 1.需求分析

​ 2.编码实现

​ 3.测试编码

​ 4.上线运维

​ 5.更新迭代

​ 6.下线

1.5 java语言介绍

java前身Oak(橡树)开始是做嵌入式编程语言。回来u随着互联网发展,编程互联网应用程序开发语言,2010sun被Oracle收购。

Java技术架构

​ javaSE Java standard edition 标准版 桌面型应用程序

​ javaEE java enterprise edition 企业版 服务器应用程序

​ JavaME Java micro edition 微型版 嵌入型应用程序

Java最大特点–跨平台

​ 一个软件在多个平台运行,而不用更改软件内容

​ Java跨平台的核心:JVM (Java Virtual Machine) Java虚拟机。
​ Java源代码文件后缀名为xxx.java所编译出来的二进制文件后缀名为xxx.class

​ JVM可以将java语言的字节码文件转换为本地操作系统指令的一个工具软件

​ 综上所述最终是字节码文件在跨平台!

1.6 java开发环境搭建

JRE(Java Runtime Environment) :

​ Java运行环境:如果我们的计算机仅仅想运行Java程序的话,装这个软件即可。JRE = JVM+核心类库

JDK (Java Development Kit) :

​ Java开发工具包:如果我们的计算机想要去开发一个Java程序的话,装这个软件即可。JDK=开发工具+JRE

1.7 运行java程序

1.8 常见的错误

语法错误(指在编译的过程中出现的一些错误)

单词拼写
遗漏分号
中文/英文符号混淆

大括号不匹配
遗漏关键字单词

第二章基本数据与运算

2.1 关键字

关键字是指高级编程语言赋予特殊含义的单词,一般由小写字母组成

​ 用于定义数据类型的关键字: byte short int long float double char boolean void class interface

​ 用于定义数据类型值的关键字: true false null

​ 用于定义流程控制语句的关键字: if else switch case default while do for break continue return

​ 用于定义访问权限修饰符的关键字: public protected private

​ 用于定义继承关系的关键字: extends implements

​ 用于定义实例对象的关键字: new this super instanceof

​ 用于定义函数类型的关键字: static final abstract synchronized

​ 用于处理异 常的关键字: try catch finally throw throws

​ 用于包的关键字: package import

其他的一些修饰关键字: native assert volatile transient

2.2标识符

​ 标识符指的是在程序中对变量、函数、类、接口、常量所定义的名称,这些名称是自定义的。

标识符必须满足以下组成规则:
​ 标识符可以由数字、字母、下划线-、美元符$ 组成
​ 标识符不能以数字开头,当然下划线和美元符其实是可以开头的,标识符不能是关键字
​ 标识符也不能是Java内置类的名称
​ 标识符可以为任意长度,但必须是一个连续的词·标识符严格区分大小写
​ 标识符是为那些抽象的数据进行的自定义起名,在一些特殊的情况下(如:循环),可以使用i j k m n之类的。

标识符规范:

​ 大驼峰式:主要针对类名,接口名。所有单词的首字母大写

​ 小驼峰是:主要针对于变量名,函数名。除了第一个单词之外,其他单词首字母大写

​ 常量规范:所有单词字母大写,单词与单词之间用下划线分隔

​ 包名规范:所有单词字母小写,单词与单词之间用句号﹒分隔

2.3注释

字节码不含注释,用于说明和注解程序

单行注释,例://注释,直到换行为止

多行注释,例:/* 注释,可以换行直到 */

文档注释:可被编译器识别,并生成相应类的程序什么数,这个类必须为public型

例:/** 注释 可以换行直到*/

2.4常量与进制

常量(字面量)就是指在程序中直接出现的一些数据
常量都有哪些:

​ 整数常量

​ 小数常量

​ 字符常量:由一个字母、数字、符号被单引号标识的数据

​ 字符串常量:由若干个字母、数字、符号被双引号标识的数据

​ 布尔类型常量

​ null常量

进制:

​ 常用的进制有:二进制,八进制,十进制,十六进制

一个二进制位称之为是一个比特 bit;八个比特称之为一个字节byte;字节是计算机当中的最小计数单元。|

2.5变量

指的是变化的量

​ 变量的本质就是在内存中程序所处的进程中的一个临时存储区域

​ 该区域的存储值有限制的

​ 该区域值的变化必须是同类型的或向下兼容的

​ 该区域有其自身的物理内存地址-指针

​ 该区域中存储值的限制和数据的变化类型由数据类型来决定

​ 该区域中其空间的分配和空间的物理内存地址由计算机底层来决定

2.6数据类型

​ 在Java中两大类

​ 基本数据类型:在变量中存储数据

​ 整型 byte(1字节有256种状态) int(4字节) short(2字节) long(8字节)

​ 常量+L 本来4个字节的常量变为8个字节

如果不存在long类型的话其他整型的相加结果一律为int

​ 浮点型 float(4字节) double(8字节)

​ 字符型 char(2字节) 存放的是ASCII编号常用: a '97 'A’65 '0’48

​ 布尔型 boolean(不确定;在常量中,整型数字默认int类型,小数数字默认是double类型布尔类型,如果是单一变量的话,在JVM中true被认为是1 false被认为是0所以是4字节存如果是布尔类型数组的话,在JVM中true和false被认为是byte类型1字节)

1)容量小的转换成容量大的要进行隐式转换;
2)容量大的转换成容量小的要进行强制转换,要加上强制转换符;
3)byte,short,char之间不会互相转换,并且三者在计算的时候首先转换成int类型;
4)实数常量默认为double类型,整数常量默认为int类型。

​ 引用数据类型:数据实体在堆内存中存储,变量仅仅存放的是数据在堆内存中的地址

​ 字符串

​ 数组

​ 对象 在Java中,但凡存储在堆内存中的数据,统称为对象

2.7 运算符

算术运算符:

操作符描述例子(变量A的值为10,变量B的值为20)
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ (B自身加一,使用原来的值)++B (B自身加一,使用加之后的值)
自减: 操作数的值减少1B-- (B自身减一,使用原来的值)或 --B (B自身减一,使用加之后的值)

关系运算符

运算符描述
==检查如果两个操作数的值是否相等,如果相等则条件为真。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。

逻辑运算符

操作符描述
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
&单与
|单或

在逻辑运算时,&& 和 || 叫做short-circuit logical operator, 意思是先判定左侧的逻辑值,如果可以决定结果则不再浪费时间去判定右侧的逻辑值。例如(2<3) || (a*5+b/3-c>5),因为(2<3)是true,无论右侧是true or false,结果都是true, 所以右侧将不再进行判定。而& 和 | 则总会对两侧进行判定,称为non-short-circuit logical operator.

位运算符:
& 位与

​ | 位或

​ ^ 位异或

​ >>右移

​ <<左移

三目运算符:

​ 数据类型变量名=布尔表达式?值1:值2;

2.8 常见错误

未声明变量,未初始化变量而使用变量

整型溢出问题

取整错误

​ 一个是小数的问题,小数主要去的是近似值想要得到一个0.5这个值的话有可能会得到0.4999999

​ 一个是整数的问题,1/3=0.3333*3= 0.99999数学上1

超出预期的除法问题

​ 左右两边是整数,结果为整数,如果出现小数则结果为小数

第三章流程控制语句

3.1 if条件语句

单分支

if(布尔表达式){

​ 执行语句;

}

双分支

if(布尔表达式){

​ 执行语句;

}

else {

}

多分支

if(){

​ 执行语句A;

}else if(){

​ 执行语句B;

​ }else {

​ 执行语句C;

}

3.2 switch分支语句

与if分支语句一样,都是对条件的判断。switch一般用在条件较多的情况下,但是有一个重要的细节及时,if语言可以对区间值或固定值进行判断,switch只能对固定值进行判断。

switch(变量){
case值1:
语句组A;break ;

​ case 值2∶
​ 语句组B;break;

​ case值n:
​ 语句组N;

​ default :
​ 语句组N+1;break;
}

注意:

switch所传入的变量,char,byte,short,int,String或者枚举类型值1,值2,一直到值n,这几个值必须是同一个数据类型的
当变量匹配的相关case的值的时候,执行case中的语句,直到遇到break结束;如果该case语句中没有break,则继续向下执行,直到遇到另外一个break结束
在这里插入图片描述
在这里插入图片描述

3.3 for循环

循环主要解决具有规律性的且具有重复性的代码问题,避免程序冗余

循环四要素:

​ 1.循环的初始化:循环的第1次执行从哪里开始

​ 2.循环的继续条件:循环从当前轮是否向后执行下一轮循环体:需要被循环执行的部分

​ 3.循环体

​ 4.循环的步长、周期:当前循环到下一轮循环之间的变化

for(循环初始条件;循环继续条件;循环步长){

​ 循环体;

}

3.4 while循环

1.循环初始化

while (2.循环继续条件){

​ 3.循环体

​ 4.循环步长

}

常见的循环问题可以分为两大类:

已知循环次数的一般用for语句做
未知循环次数但是已知循环结束条件一般用while语句做

3.5 break,continue跳出语句

break在循环语句中叫做终止语句,终止的是break最近的一层循环

continue在循环语句中叫做跳过语句,跳过本次循环开启下一轮循环

第4章 常用类

1.Math类
PI ( Π ) 和 E (自然对数的底)

2.三角函数
sin(radians) 返回以弧度为单位的角度的三角正弦函数值
cos(radians) 返回以弧度为单位的角度的三角余弦函数值
tan(radians) 返回以弧度为单位的角度的三角正切函数值
toRadians(degree) 将以度为单位的角度值转换为以弧度表示
toDegrees(radians) 将以弧度为单位的角度值转换为以度表示
asin(a) 返回以弧度为单位的角度的反三角正弦函数值
acos(a) 返回以弧度为单位的角度的反三角余弦函数值
atan(a) 返回以弧度为单位的角度的反三角正切函数值

3.指数函数
方法+描述
exp(x) 返回 e 的 x 次方
log(x) 返回 X 的自然底数
1ogl0(x) 返回 x 的以 10 为底的对数
pow(a, b) 返回 a 的 b 次方
sqrt(x) 对于 x >=0 的数字,返回 x 的平方根

4.取整
方法 描述
ceil(x) :x 向上取整为它最接近的整数。该整数作为一个双精度值返回
floor(x) :X 向下取整为它最接近的整数。该整数作为一个双精度值返回
rint(x):X 取整为它最接近的整数。如果 X 与两个整数的距离相等,偶数的整数作为一个双精度值返回
round(x):如果 X 是单精度数,返回( int) Malh.floor(x+0.5);如果 x 是双精度数,返回( long) Math.floor(x-K).5)

min 和 max 方法用于返回两个数(int、long、float 或 double 型)的最小值和最大值。
abs 方法以返回一个数(int、long、float 或 double 型)的绝对值

2.Random类主要用于产生随机数
int nextInt() 随机生成一个整数0~2^32的整数
int nextInt(n) 随机产生一个[0,n)的整数
double nextDouble() 随机产生一个[0,1)的小数
boolean nextBoolean() 随机产生一个布尔类型值

3.Scanner类

String next() 获取直到遇到空格为止的一个字符串
String nextLine() 获取直到遇到回车为止的一个字符串
int nextInt() 获取一个整数空格结束
double nextDouble() 获取一个小数空格结束
float nextFloat() 获取一个小数空格结束
boolean nextBoolean() 获取一个布尔类型空格结束

4.String类
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了, 不可修改其长度,不可修改其内容 。所以将来对字符串内容的改变,不能在原地改,只能重新创建一个字符串。

char charAt(int index) 获取指定角标index处的字符
int indexOf(int ch) 获取指定字符(编码)在字符串中第一次(从左到右)出现的地方反回的是角标。-1 表示不存在
int lastIndexOf(int ch) 获取指定字符(编码)在字符串中第一次(从右到做)出现的地方返回的是角标
int indexOf(String str) 获取指定字符串在本字符串中第一次(从左到右)出现的地方返回的是角标
int lastIndexOf(String str) 获取指定字符串在本字符串中第一次(从右到左)出现的地方返回的是角标
int length() 获取字符串的长度
String[] split(String regex) 将字符串按照regex的定义进行分割
String substring(int beginIndex) 截取一段子字符串,从beginIndex开始到结尾
String substring(int beginIndex, int endIndex) 截取一段子字符串,从beginIndex开始到endIndex(不包含)

修改字符串:
方法名 含义
String toLowerCase() 将字符串中所有的英文字母全部变为小写
String toUpperCase() 将字符串中所有的英文字母全部变为大写
String trim() 移除字符串两端的空格
String replace(char oldCh,char newCh) 将字符串中oldCh字符替换成newCh字符

比较字符串:

方法名 含义
int compareTo(String anotherString) 按照字典顺序比较两个字符串的大小
boolean contains(String another) 判断当前字符串中是否包含指定字符串another
boolean equals(String another) 比较当前字符串与指定字符串的内容是否相同
boolean isEmpty() 判断当前字符串是否为空
boolean startsWith(String prefix) 判断该字符串是否以prefix开头
boolean endsWith(String suix) 判断该字符串是否已suix结尾

如何删除字符串中左右两端出现的空格,不用trim?
思路:从字符串两端开始,只要遇到字符就记下该下标,最后用两端的下标截取字符串,就可以去除两边的空格。

在字符串"abcbcbcbcbcbc"中统计"bcb"出现的次数?
思路:
非贪心算法:每次获取子串在父串的第一个索引,计数后,截取该索引处的字符串,并循环,直到找不到索引为止
贪心算法:循环长度较长的字符串,次数为较长字符串-较短字符串,每次判断较长字符串的首字母是否和要匹配的字符串的首字符匹配,相匹配,就截取较长字符串(匹配字符串的长度)与要匹配的字符串比较计数

查找两个字符串中最长的公共子串?
思路:在较短的字符串,定义左右角标每次循环截取较短字符串,与比较字符串比较是否包含关系,是就输出,否则就继续循环遍历

5 Character类
字符工具类

方法名 含义
Character.isDigit(char ch) 判断字符是否是数字
Character.isLetter(char ch) 判断字符是否是字母
Character.isLetterOrDigit(char ch) 判断字符是否是数字或字母
Character.isLowerCase(char ch) 判断是否是小写字母
Character.isUpperCase(char ch) 判断是否是大写字母
Character.isSpaceChar(char ch) 判断是否空白字母(空格 制表符 回车)
案例1
将十六进制数字转为十进制?
思路: 用户输入十六进制字符,循环用字符串工具类判断该字符是否为数字和字母,是字母就判断该字母是否在A-F的范围内,否则就输出非法字符,如果不是非法字符就循环计数十六进制对应的十进制数字。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值