第四次博客
一、JAVA基础
1、注释,标识符,关键字
1、注释
-
平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,复杂起来我们就需要用到注释
-
注释并不会被执行,是给我们写代码的人看的 BAT
-
书写注释是一个非常好的习惯
JAVA中的注释有三种
单行注释
//开头,写在//后面,是写给人看的
多行注释
/* 注释 */,在中间写注释,又叫块注释,注释一段注释
Ctrl+Shift+/ 多行注释快捷键
文档注释
//JavaDoc:文档注释
/*
*/
每个开头都需要*号
2、 标识符、关键字
JAVA所有的组成部分都需要名字。类名,变量名以及方法名都被称为标识符
-
所有标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(__)开始
-
首字符之后字母(A-Z或者a-z),美元符号($),或者下划线(__)或数字的任何字符组成
-
不能使用关键字作为变量名或方法名
-
标识符是大小写敏感的
-
合法标识符距离:age,$salary,value,__1_value
-
非法标识符举例:123abc,-salary、#abc
-
可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音
关键字:
![](file://C:\Users\asus\Desktop\临时\屏幕截图%202022-10-23%20132345.png?msec=1673268769707)
2,数据类型
强类型语言
要求变更量的使用要严格符合规定,所有变量都必须先定义后才能使用
弱类型语言
要求变更量的使用不一定要严格符合规定,所有变量都必须先定义后才能使用
基本类型
数值类型
整数类型
byte -128~127
short -32768~32767
int -2147483648~2174483647
long -9223372036854775808~9223372036854775807
定义long类型时,数字后加L
整数拓展
二进制0b
十进制
八进制0
十六进制0x 09 AF 16
浮点类型
float 占4个字节
定义float类型时,数字后加F
double 占8个字节
浮点数拓展
银行业务怎么表示?
//float 有限 离散 舍入误差 结果是一个大约数,接近但不等于
//double
最好完全避免使用浮点数进行比较
字符类型
char 占2个字节 定义值加 ’ ‘
字符拓展
当输出标识符前加int,进行强制转换
编码 Unicode 2字节 65536
转义字符
\t 制表符
\n 换行
boolean类型
占1位,其值只有true和false两个
//八大基本数据类型
//整数
int num1 = 10;//最常用
byte num2 = 20;
short num3 = 30;
long num4 = 30L;//Long类型要在数字后面加个L
//小数:浮点数
float num5 = 50.1F;//float类型要在数字后面加个F
double num6 = 3.141592653589793238462643;
//字符
char name = '国';
//字符串,String不是关键字,类
//String namea = ‘秦疆’;
//布尔值
boolean flag = true;
//boolean flag = false;
引用类型
类
接口
数组
什么是字节
位(bite):是计算机内部数据储存的最小单位,11001100是一个八位二进制
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示
1B(byte,字节)= 8bit(位)
字符:是指计算机中使用的字母,数字,字和符号
1bit表示1位
1Byte表示一个字节 1B=8b
1024B=1KB
1024B=1M
1024M=1G
3,类型转换
进行类型转化时由低到高
byte,short,char->int->float->double
不同类型的数据先转化成同一类型,再进行运算
强制转换
(类型)变量名 高到低
自动转换
低到高自己转换
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能出现内存溢出,或者精度问题
定义一个较大的数字是应先将数转换为long
4,变量,常量
type varName [= value];
作用域:
类变量
实例变量
局部变量
常量 final MAX A = 10;
命名规范:
1.见名知意
2.驼峰命名(变量,方法)
3.类,首字母大写,驼峰命名
4.常量:大写+下划线
5.不要用拼音命名
5,运算符
算术运算符:+ - * / % ++ --
赋值运算符:=
关系运算符:> < >= <= == != instanceof(编译时类类型要么与后面类相同,要么与后面类具有父子继承关系)
逻辑运算符:&&与 ||或 !非
位运算符:& | ^ ~ >> << >>>
条件运算符:? :
扩展运算符 + = - = *= /=
6,包机制,JavaDoc
域名倒写
package
import
防止命名冲突
JDK帮助文档 javadoc:
@author:作者
@Version:版本
@since:支持的最早版本
@param:参数
@return:返回的值
@throws:抛出的异常
二、JAVA流程控制
1,用户交互Scanner
Java.util.Scanner 获取用户的输入
基本语法:
Public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接受");
if (scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输入的内容为:"+str);
}
scanner.close();
}
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
next()
-
1.一定要读取到有效字符后才可以结束输出
-
2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉
-
3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
-
4.next()不能得到带有空格的字符串
nextLine():
1.以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
2.可以获得空白
建立一个Scanner类后,最后需要加上scanner.close();语句,不然scanner会一直执行
2,顺序结构
JAVA的基本结构就是顺序结构,除非特别指明,否则按照顺序一句一句执行
顺序结构是最简单的算法结构
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
3,选择结构
if单选择结构
判断一个东西是否可行,然后我们采取执行
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
if双选择结构
if(){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为flase
}
语句T或F都有对应的语句
if多选择结构
存在很多判断
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
}else if(布尔表达式2){
//如果布尔表达式2的值为ture执行代码
}else if(布尔表达式3){
//如果布尔表达式3的值为true执行代码
}else{
//如果以上布尔表达式都不为true执行代码
}
嵌套的if结构
if(布尔表达式1){
////如果布尔表达式1的值为true执行代码
if(布尔表达式2){
////如果布尔表达式2的值为true执行代码
}
}
switch多选择结构
switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
switch(expression){
case value:
//语句
break;//可选
case value:
break;//可选
//你可以有任何数量的case语句
default://可选
//语句
}
swtich 语句中的变量类型可以是:
byte,short,int或者char
switch支持字符串String类型
同时Case标签必须为字符串常量或字面量
case后必须加break结束该程序段
4,循环结构
while循环
while(布尔表达式){
//循环内容
}
只要布尔表达式为true,循环就会一直进行下去
我们大多数时候是会让循环停下来的,我们需要一个让表达式失效的方式让循环结束
do...while循环
对于while语句而言,不满足条件就不进入循环,但是有时候我们需要及时补镜如循环,也要至少执行一次
do...whlie与while类似,但是do...while至少执行一次循环
do{
//代码语句
}while(布尔表达式)
while先判断再执行,do...while先执行再循环
for循环
是一种支持迭代的一种通用结构,最有效,最灵活的循环结构
执行的次数是在执行前就确定的
for(初始化;布尔表达式;更新){
//代码语句
}
100.fori 快捷生成 for(int i = o ;i < 100;i++){ }
在java5中引入了一种主要用于数组的增强型for循环
System.out.print("\n")或 System.out.print() 换行
System.out.print("\t") 换行
break 用于强制退出循环
continue 用于终止某次循环
5,break&continue
break:跳出循环
continue:终止当次循环
带标签continue
return:结束方法的运行
三、 JAVA方法详解
1,何谓方法
-
System.out.println(),那么它是什么呢?
-
JAVA是语句的集合,它们在一起执行一个功能
方法是解决一类问题的不走的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
- 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展。
2,方法的定义及调用
- JAVA的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:
方法包含一个方法头和一个方法体。下面是一个方法的所有部分
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用是用于接收外界输入的数据
实参:调用方法时实际传给方法的类型
方法体:方法体包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
- 调用方法:对象名.方法名(实参列表)
当方法返回一个值的时候,方法调用通常被当作一个值。
int larger = max(30,40);
当方法返回值是void(空),方法调用一定是一条语句。
System.out.println("hello,kuangshen!");
3,方法重载
- 重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载规则:
方法名称必须相同
参数列表必须不同(个数不同,或类型不同,参数排列顺序不同等)
方法的返回类型可以相同也可以不同
仅仅返回类型不同不足以成为方法的重载
- 实现理论:
方法名称相同时,编译器会根据调用方法的参数个数,参数类型等逐个匹配
,以选择对应的方法,如果匹配失败,则编译器报错
4,命令行传参
5,可变参数
可以传很多个参数
java支持传递同类型的可变参数给一个方法
在指定参数类型后加一个省略号(...)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在他之前声明
6,递归
A方法调用B方法
递归就是:A方法调用A方法,就是自己调用自己
递归结构包括两个部分:
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
递归体:什么时候需要调用自身方法
递归太多占用内存太大
四、数组
1,数组概括
数组的定义:
数组是相同类型数据的有序集合
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
2,数组声明创建
- 收i按必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dateType[] arrayRefVar; //首选的方法
或
dateType arrayRefVar[]; //效果相同,但不是首选方法
- JAVA语言使用new操作符来创建数组,语法如下:
dateType[] arrayRefVar = new dateType[arraySize];
-
数组的元素是通过索引访问,数组索引从0开始。
-
获取数组长度:arrays.length
3,数组使用
For-Each循环
增强型for循环:arrays.for
4,多维数组
可以看作是数组的数组,比如二维数组就是一个特殊的数组,其每个元素都是一个一维数组
二维数组:
int a[][] = new int[2][5];
5,Arrays类
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作
查看JDK帮助文档
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而”不用”使用对象来调用(主义:是“不用”而不是“不能”)
具有以下常见功能:
给数组赋值:通过fill方法
对数组排列:通过sort方法,按升序
比较数组:通过equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
6,稀疏数组
当一个数组中大部分元素为0;或者为同一个值的数组时,可以使用稀疏数组来保存该数组
稀疏数组的处理方式是:
记录数组一共有几行几列,有多少个不同值
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
7,内存分析
堆:
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
栈:
存放基本变量类型(会包含这个基本类型的具体数据)
应用对象的变量(会存放这个引用在堆里面的具体地址)
方法区:
可以被所有的线程共享
包含了所有的class和static变量
五、面向对象
1,面向过程&面向对象
- 面向过程
步骤清晰简单,第一步做什么,第二步做什么...
面对过程是和处理一些较为简单的问题
- 面对对象思想
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象是和处理复杂的问题,适合处理需要多人协作的问题!
- 对于描述复杂的事物,对于从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到宏观操作,仍然需要面向过程的思路去处理。
2,什么是面向对象
面向对象编程(Object-Oriented Programming,oop)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)的数据。
抽象
三大特性:
-
封装
-
继承
-
多态
从认识论角度考虑是先对象后有类。对象,是具体的事物,类,是抽象的,是对对象的抽象
从代码运行角度考虑是先有类后有对象。类是对象的模板。
3.回顾方法及加深
- 方法的定义
修饰符
返回类型
break和return的区别
方法名
参数列表
异常抛出
- 方法的调用
静态方法
非静态方法
形参和实参
值传递和引用传递
this关键字
4,类与对象的关系
- 类是一种抽象的数据类型,它是对某一类事物整体描述/定义。但是并不能代表某一个具体的事物
动物、植物、手机、电脑... ...
Person类,Pet类,Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
- 对象是抽象概念的具体实例
张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例
能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
5,创建与初始化对象
-
使用new关键字创建对象
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象,进行默认的初始化以及对类中构造器的调用。
-
类中的构造器也成为构造方法,是在进行创建对象的时候必须调用。并且构造器有以下两个特点:
1,必须和类的名字相同
2,必须没有返回类型,也不能写void
构造器必须掌握
6,封装
- 该露的露,该藏得藏
我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
- 封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。
记住这句话就够了:属性私有,get/set
7,继承
继承的本质是对某一批类的抽象,从未实现对现实世界更好的建模。
extands的意思是“扩展”。子类是父类的扩展。
JAVA中类至于单继承,没有对继承!
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extands来表示。
子类和父类之间,从意义上讲应该具有比“is a”的关系。
object类
this - super
方法重写 --> 多态
8,多态
即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的应用的类型有很多(父类,有关系的类)
多态存在的条件
有继承关系
子类复写父类方式
父类引用指向子类对象
注意:多态是方法的多态,属性没有多态。
instanceof (类型转换) 引用类型
9,抽象类
abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。
抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。
抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。
抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。
10,接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有!
接口:只有规范!
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能...”的思想,如果你是天使,则必须能飞。如果你是汽车,则必须能跑,如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。
接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守。
OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是应为设计模式所研究的,实际上就是如果合理的去抽象。
11,内部类
内部类就是一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类就是外部类
1,成员内部类
2,静态内部类
3,局部内部类
4,匿名内部类
标签:语句,调用,博客,数组,类型,方法,表达式,第四次 From: https://www.cnblogs.com/Ykun11/p/17038522.html