Java基础
来源:互联网 发布:龙文章的真实身份知乎 编辑:程序博客网 时间:2024/06/07 12:17
Java语言基础
简介
Java是一门面向对象编程语言,不仅吸收C++各种优点,还摒弃了C++中难以理解的多继承指针等概念,Java语言有两大特征:功能强大和简单易用,Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立于可移植性、多线程、动态性等特点,Java可变现桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
Java语言组成部分:关键字、标识符、注释、常量和变量、运算符、语句、函数、数组等组成。
关键字
public static class 等等声明其标示名称的类型或者修饰某容器都统称为关键字。
标识符
标示名称也可以称之为数据载体的名字,由26个英文大小字母写所构成,数字0-9,符号:_和$组成。
标识符定义合法规则:
1.数字不可开头
2.不可以使用关键字
3.不建议使用中文名称可读性差
注意:Java中严格区分字母大小写,在定义名称时要定义有意义的名称,如果名称过程可取名称的首字母进行缩写。
注释
注释/注解用于给定程序的说明,方便与其它程序猿查看从而进行阅读文档就可以了解程序基本结构(养成注释的好习惯,方便团队合作)。
注释编译器不会进行编译,所以也就意味着不会加载到内存中从而影响程序的运行效率。
注释的分类:
1.单行注释以//表示
2.多行注释以/**/
3.文档注释 /***/ 文档注释是Java特有的注释
常量
final修饰,使用final修饰后其值不可被更改。
常量为常用的数据不可更改的数据,常量声明必须赋值否则编译错误。
常量分类:
1.整数常量
2.小数常量
3.布尔常量
4.字符常量
5.字符串常量
6.Null常量只有一个数值就是null值
对于整数有四种表现形式:
1.二进制 0,1 满二进一
2.八进制 0,7 满8进1 用0开头表示
3.十进制 0,9 满十进一
4.十六进制 0,9 A-F 满16进1用0X开头表示
各个进制都有不同的表达形式,
变量
变量内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域可以在该类型的范围内不断进行变化。
定义变量来存储同一类型的变量进行重复的使用,简单点就是定义了一个变量在存储同类型的数据的时候,此时都调用该标量,这就是重复使用。
变量的作用范围在一对{}大括号之间有效。
定义变量的格式为:数据类型 标识符=值
从始至终改变并非字符串值改变的是容器值换句话来说就是改变的是容器的值而非字符串本身。
数据类型
Java有两大数据类型如下:
1.内置数据类型
2.引用数据类型
内置数据类型
Java提供了八种基本的类型,六种数字类型(四个整数型,两个浮点型),一种字符型和boolean型。
byte的数据类型是8位,有符号的,以二进制补码表示的整数。
最小值是-128(-2^7)
最大值是127(2^7-1)
默认值是0
byte用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int的四分之一。
由八个二进制数位组成的字节,通常可表示一个字符。
在我们的概念中只有文字但是在计算中表现的形式不是这样的给我们看到的是编译后的而便宜前的其实都是由二进制数位组成的字节。
Byte为字节类型,一个K为1024个字节。
Short的数据类型是16位,有符号的,以二进制补码表示的整数。
最小值为-32768(-2^15)
最大值为32767(2^14-1)
Short类型和byte类型一样也可以起到节省空间的作用,short类型变量是int类型变量所占空间的二分之一。
默认值为0
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
例子:int a = 100000, int b = -200000。
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是 0L;
例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f。
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:double d1 = 123.4。
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
例子:char letter = 'A';。
引用类型
在Java中,引用类型的变量非常类似于C/C++中的指针,引用类型指向一个对象,指向对象的变量是引用变量,这些变量在声明时被制定为一个特定的类型如 Employee Dept Student等等,变量一旦声明类型就不能在进行改变了。
对象数组都是引用类型
所有引用类型的默认值都null
一个引用变量可以用来引用任何与之兼容的类型
类型转换
1.自动类型转换(隐式类型转换)。
2.强制类型转换(显示类型转换)。
自动类型转换:大容器数据类型 标识符=小容器标识符;
强制类型转换:小容器数据类型 标识符=(小容器数据类型)大容器标识符;
理解:这就好比是游戏的升级大众的思维都是我要升级升级这样我就有更好的游戏体验,但是你非要逆天我要降级降级我需要最垃圾的游戏体验。一个自动一个强制也好比是计算的正常关机和强制关机。
运算符
算数运算符 加法+减法- 乘法* 除法/ %求余数
赋值运算符 =只赋值 +=运算且赋值
关系运算符 > < >= <= == !=
三元运算符 条件表达式?表达式1:表达式2;返回结果为布尔类型
逻辑运算符 & 并且 |或者 ^ !
递增与递减运算符 ++ -- 如果标识在++之前i++ 那么它是先赋值然后在进行递增,而++i则是先递增在进行赋值。--也是同样的道理。i--先赋值在进行递减 --i先递减在进行赋值,注意在for循环中i值的变化会影响到整个循环。
程序流程控制
程序的流程控制提供以下三种结构:
1.判断结构
2.选择结构
3.循环结构
判断其状态做出相应的响应,选择其状态做出响应,循环其结果结合其他两种结构或其他做出相应的响应。
判断结构
判断结构的if语句有三种表达形式,两外if可嵌套
第一种:单重if
if(表达式){
}
else{
}
第二种:多重if
if(表达式) {
}
if(表达式){
}
else{
}
第三种:if else if else if
if(表达式){
}
else if(表达式){
}
else{
相关代码...
}
if也好else也好或者其它流程控制结构,都会习惯写一个大括号原因是{}大括号中可写入多行流程代码段执行多个代码进行结果反馈如果不写大括号只能写入一行代码然后进行执行如果没有大括号的话写入多行代码编译器会提示错误编译器无法进行编译。
选择结构
选择结构语句
switch(表达式){
case 取值1
执行语句
break;//结束语句
default
执行语句
break; //结束语句
}
case为执行值选择值与表达式值相对应执行相应的选择,break用于结束选择结构,continue用于跳出选择结构,default为缺省默认结构如果其他选择结构都不对默认执行default缺省语句。注意switch选择结构只有四种类型数据可作为switch的表达式byte short int char等四种。
判断与选择的区别
if是对具体的值进行判断,对区间进行判断,对运算结构是boolean类型的表达式进行判断。
switch对具体的值进行判断,值的个数通常固定,对于固定值判断建议使用switch,因为switch会将具体的答案都加载进内存当中,效率相对高一些。
循环结构
循环结构主要用于来一次性来完成重复的工作。
循环结构有三种:
1.While(表达式)循环
2.do{}while(表达式)循环
3.for(int i=0;i<=args.length;i++){}循环
while循环规则
判断其是否满足while的循环条件如果满足则继续执行,如果不满足则跳出循环,如果满足继续执行,在进行使用的时候如果需要做到精确的控制可使用continue和break语句,while循环如果条件不满足一次也不执行。
do-while循环规则
判断其是否满足while的循环条件如果满足则继续执行,如果不满足则跳出循环这也就意味着满足继续执行,在进行控制时候需要做到精确的控制可使用continue和break语句,while循环如果条件不满足执行一次。
for循环规则
for循环表达式分为三部分第一部分初始化表达式,第二部分循环条件表达式,第三部分循环后的操作表达式。For循环的初始化表达式只读取一次,判断循环条件为真则执行循环体。然后执行循环后的操作表达式,接着继续判断循环后的表达式,重复整个执行过程,直到条件不满足为止。
while和for循环可以进行互换,区别与for循环而定义的变量在for循环结束就是在内存当中进行释放,而while循环在结束后其变量还可以使用。
死循环操作,如while(true){} 不知道执行多少次因为表达式永远为真true执行无数次,死循环。
函数
1.函数定义
函数也可以称之为方法,函数的格式:
修饰符 返回值类型 (参数类型 形式参数1,参数类型 形式参数2){
执行语句..
return 返回值;
}
返回值类型当函数执行完毕后返回的结果类型,参数类型是形式参数的数据类型,
形式参数可以是一个变量也可以是一个对象或者其它符合规则的参数,实际参数是指传递给形式参数的具体值,return用于结束函数,返回值该函数的运算结果 将改结果返回给调用者。
2.函数特点
普通的函数返回值类型如int double等等都是又返回值类型,而java提供了一种无返回值类型的函数可以结束函数但是不对调用返回结果,void无返回值类型。
哪怕是void类型的函数也会有隐式的结束语句,只是未在编译器中呈现,在无返回值类型的函数写入return;可结束语句,在无参返回值类的函数中一旦结束语句也就意味着该功能调用完毕,在reutrn调用完毕后不可再在return之后加入其他代码。
3.函数的应用
根据其具体的业务需求来明确其具体的实现细节,和返回的参数类型,参数列表等等。
4.函数的重载
在同一个类中允许存一个以上的同名函数,只要它们的参数类型和参数个数不同即可。
重载的特点:与返回值类型无关,只看参数的列表。
重载的好处:方便阅读,优化了程序的设计。
注意(函数当中的变量获取其它绝对不能存在静态元素和被权限修饰符修饰的元素因为其中的元素本身就在局部函数当中,函数为其赋予了局部权限,所以加上修饰等等元素毫无意义)
数组
数组是同一类型数据的集合,是用来存储数据的一个容器,常用的数组都是一维数组除此之外还有二维数组三维数组等等,数组的下标从0开始,在给容器赋值时如果抛出了异常java.lang.ArrayIndexOutOfBoundsExceptions,该异常是告诉你下标越界了,本来数组下标元素最大为1结果你为元素2赋值该元素根本就不存在。
一维数组
一维数组的格式:
数据类型 [] 数组名称=new数据类型[数组元素长度];
数据类型 数组名称[]=new数据类型[数组元素长度];
数据类型 [] 数组名称=new数据类型[]{“数据”,”数据”,”数据”};
数据类型 数组名称[] =new数据类型[]{“数据”,”数据”,”数据”};
数据类型 [] 数组名称=new数据类型{“数据”,”数据”};
二维数组不做过多介绍,通常一维数组就可以解决问题,所以很少要用到二维数组。
数据类型 [] [] 标数组名称=new数据类型[1][1];
内存空间模块:寄存器,本地方法区域,方法去,栈内存,堆内存。
栈内存
栈内存存储的都局部变量(定义在方法/函数中的变量),变量所属的作用域一旦结束,该变量就自动释放。
局部代码块 限定于局部变量的生命周期刑满释放 生命周期低用完就是释放
{
//在此处的元素不能有任何的修饰如果 private static类型 名称
}
这是因为局部代码中,本身就为其设定了权限只能在局部中访问,所以加上其它毫无意义。
堆内存
存储的是数组和对象,只要是new的都存储到堆内存当中,数组为实体 对象也为实体 实体存储实实在在的数据,每个实体都有一个首地址值,堆内存中每一个变量都有默认的初始化值,根据类型不同赋值不同例如String为null int 0 double 0.0等,当该数据摒弃不用了。
注意:例如数组元素一旦该元素为null,此时该地址和数据就被当做垃圾进行回收,但是其指针仍存在只是其原有指向对象地址被销毁,此时在创建数组实体就相当于为数组对象重新指向了一个地址/实体。
数组遍历
1.for循环遍历
for (int i = 0; i <stsr.length; i++) {
System.out.println(stsr[i]);
}
数组常见操作
1.获取最大值、最小值
public static void getMinElement(int[] scores) {
int min=scores[0];
for (int i = 0; i < scores.length; i++) {
if (min<= scores[i]) {
continue;
}
else{
min=scores[i];
}
}
System.out.println("最小值:\t" + min);
}
//最大值
public static void getMaxElement(int[] scores) {
int max=scores[0];
for (int i = 0; i < scores.length; i++) {
if (max <= scores[i]) {
max = scores[i];
}
}
System.out.println("最大值:\t" + max);
}
注意,其中的规律是其下标为0的值与其他值相互比较从而来进行获取最大值和最小值。
2.排序
选择排序:
public static void getArraySort(int[] scores) {
for (int i = 0; i <= scores.length - 1; i++) {
for (int j = i + 1; j < scores.length; j++) {
if (scores[i] >= scores[j]) {
int temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
System.out.println(scores[i]);
}
}
在要排序之前首先要做到当前值和下一个值进行比较然后在进行换位,首先要让数组下标不越界这样就很好解决了。
二维数组
二维数组和一维数组没什么太大的区别,要说区别就在其维度与一维不同,可以这么理解,一维数组存放数据的是一行为单位的,而二维数组则是以行列为单位划分的更加具体而已。
二维数组的格式:
数组类型 [] [] 数组名称=new 数组类型[行][列];
因为通常应用中少,所以不深究了。
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- Java基础
- JAVA基础
- JAVA基础
- JAVA基础
- java基础
- js判断是pc还是移动端
- PHP常用算法和数据结构示例(必看篇)
- PHP基础知识点
- linux下重启oracle服务:监听器和实例详细讲解
- android 签名、配置编译文件
- Java基础
- vue中使用jsx语法
- git命令
- shiro学习随笔【五】自定义生成会话ID--SessionIdGenerator
- BZOJ 2460 元素 (线性基)
- java实现列表的上下移动和置顶操作
- mysql的封锁机制以及读锁和写锁的区别
- OIDC--对 JWT标准的id_token进行验证和解密。
- 洛谷Oj-封锁阳光大学-BFS + 染色