likes
comments
collection
share

(一)Java基础知识复习(语法和基础概念)

作者站长头像
站长
· 阅读数 22

一、数据类型(基本数据类型和引用数据类型)

(一)基本数据类型

(一)Java基础知识复习(语法和基础概念)
基本类型占用内存(字节)默认值表示范围封装类
byte1(byte)0-128 (-2^7) ~127 (2^7-1)Byte
short2(short)0-32768 (-2^15) ~32767 (2^15-1)Short
int40-2147483648 (-2^31) ~2147483647 (2^31-1)Integer
long80L-9223372036854775808 (-2^63) ~9223372036854775807 (2^63-1)Long
float40.0fIEEE 754标准的单精度浮点数Float
double80.0dIEEE 754 标准的双精度浮点数Double
boolean1 or 4false\u0000 (0) ~ \uffff (65535)Booble
char2\u0000(null)true / falseCharacter

注:

  1. int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值 是null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个 对象,在任何引用使用前,必须为其指定一个对象,否则会报错。
  2. 基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间, 必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另 一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。
  3. 虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。 使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

1. 基本类型间的转换

存储范围小的类型到存储范围大的类型: 自动转换 byte → short(char) → int → long → float → double

从存储范围大的类型到存储范围小的类型(使用强转,可能会损失精度) double → float → long → int → short(char) → byte

(二) 引用数据类型

下面我们以String类型来进行解释

1. String 特性

(1)String类是final修饰的,不可以被继承。 (2)String类的底层是基于char数组的。 (3)String类被设计成不可变(immutable)类,所以它的所有对象都是不可变对象,线程安全,不会有并发问题

2. 首先,必须明确的一个概念是String不是基本的数据类型!!!

  • String其实是个类,因此它属于引用数据类型;
  • 基本数据类型的存储原理是:基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间的;
  • 所有引用类型继承于Object类(也是引用类型),都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储;
  • 引用是存储在内存栈上的,而对象本身是存储在内存堆上的;
  • 8种基本类型在Java中都有对应的封装类型,也就是引用类型:
    • 整数类型:Byte, Short, Integer, Long
    • 浮点类型:Float, Double
    • 字符型:Character
    • 布尔类型:Boolean
  • Java的引用类型有五种:类,接口,枚举,注解,数组;
  • 引用类型的底层结构和基本类型的差别比较大,主要在创建对象上有所不同;
  • 引用类型的数据创建对象时需要通过new创建对象,创建的对象会保存在堆中,然后将该对象赋值给一个引用,也就是这个引用将会指向对象堆中的地址,而这个引用则存储在栈中;
  • String类型也可以不用new来创建,会在常量池中创建对象.String是一个比较特殊的类.
//String常见的方法
 
//1.String的构造方法
String(String original)                 //把字符串数据封装成字符串对象
String(char[] value)                    // 把字符数组的数据封装成字符串对象
String(char[] value,int index,int count)//把字符数组中的一部分数据封装成字符串对象,
//2.String类的获取功能
length()                                //获取字符串的长度,其实也就是个字符个数
charAt(int index)                       //获取指定索引处的字符
indexOf(String str)                    //获取str字串对象中第一次出现的索引
 
substring(int start)                    //从start开始截取字符串
 
String substring(int start, int end)    //从start开始,到end结束截取字符串,包括start,不包括end
//3.String判断功能
equals(Object obj)                     //比较字符串的内容是否相同
equalsIgnoreCase(String anotherString) //比较字符串的内容是否相同,忽略大小写
startsWith(String prefix)              //判断字符串对象是否以指定的字符开头(区分大小写)
endWith(String str):                   //判断字符串对象是否以指定的字符结尾
isEmpty()                              //判断字符串是否为空
 
//String类中的转化方法:
toCharArray()                           //把字符串转换为字符数组.
toLowerCase()                           //把字符串转换为小写字符串
toUpperCase()                           //把字符串转换为大写字符串
 
常用方法:
trim()去除字符串两端的空格
split()去除字符串中指定的字符,然后返回一个新的字符串
subSequence(int beginindex,int endIndex)截取字符串中指定位置的字符组成一个新的字符串
 
replace(char oldChar,char newChar)将指定字符替换成另一个指定的字符
replaceAll(String regex,String replasement):用新的内容替换全部旧的内容
lastIndexOf(String str)返回指定字符出现的最后一次下标
contains()查看字符串中是否包含指定的字符

(三)基本数据类型和引用数据类型的区别和联系:

1. 从概念方面来说

  • 基本数据类型:变量名指向具体的数值
  • 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值

2. 从内存构建方面来说

基本数据类型:变量在声明之后java就会立刻分配给他内存空间
int a; //声明变量a的同时,系统给a分配了空间  
a=12;
引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
MyDate today;  
today.day = 14; //错误!因为today对象的数据空间未分配
MyDate today;  
today = new Date(); //正确的方式

3. 从赋值方面来说

  • 基本数据类型:使用时需要赋具体值,b = a;是把a的值传给b,存在b的内存空间内。该判断时使用“==”号
  • 引用数据类型:使用时可以赋null,判断时使用equals方法,b = a;是把a的数据的地址传给b,即a和 b都存储的是一个地址,这个地址指向实际的数据。(与C++中的指针类似)

二、变量和常量以及标识符

在Java编程中,变量和常量是管理和存储数据的基本单元。理解它们的用法和区别是掌握Java语言的基础。j接下来我们将讨论Java中的变量和常量,讨论它们的定义、使用、以及它们在程序中的作用。

(一)变量

变量是一个存储数据的容器,在程序执行过程中可以改变其存储的值。变量必须在使用之前进行声明。变量的声明包括指定变量的类型和名称。

1. 变量的声明与初始化

在Java中,声明一个变量的基本语法如下:

数据类型 变量名;

例如:

int number;

这行代码声明了一个名为number的变量,其数据类型为int。声明之后,变量可以被赋值:

number = 10;

可以在声明的同时进行初始化:

int number = 10;

可以在一行代码中同时声明多个相同数据类型的变量,变量和变量之间使用逗号间隔。

int a = 100, b = 200, c = 300

Java 是强类型编程语言,要求所有的数据都要有明确的数据类型,以便于程序在运行过程中为这些数据被分配合适的内存空间。 举一个简单的例子,不同的数据类型就好比是不同大小的纸箱,装苹果和装西瓜所使用的箱子的大小是不一样的。

(一)Java基础知识复习(语法和基础概念)

2. 变量的作用域

变量的作用域决定了变量的可访问性。Java中变量的作用域通常有以下几种:

  • 局部变量:在方法、构造函数或块内部声明,只在其所在的代码块内可访问。
  • 实例变量:在类中声明,不在任何方法内,没有static修饰符,属于类的每个对象。
  • 类变量:用static修饰,在类中声明,所有对象共享同一个静态变量。

3. 示例

以下是一个简单的示例,展示了变量的声明、初始化和使用:

public class VariableExample {
    public static void main(String[] args) {
        // 局部变量
        int a = 5;
        double b = 3.2;
        char c = 'A';

        // 输出变量的值
        System.out.println("整数变量 a 的值: " + a);
        System.out.println("浮点变量 b 的值: " + b);
        System.out.println("字符变量 c 的值: " + c);
    }
}

(二)常量

常量是其值在程序执行期间不会改变的变量。Java中使用final关键字来定义常量。一旦初始化,常量的值就不能被修改。

下图是Java常见的关键字,这些关键字之后会逐个学习 (一)Java基础知识复习(语法和基础概念)

1. 定义常量

常量的定义形式如下:

final 数据类型 常量名 = 值;

例如:

final int MAX_USERS = 100;

常量通常使用大写字母表示,以便于与变量区分。

2. 常量的优点

  • 可读性:常量名通常能清晰地描述它所代表的意义,提升代码可读性。
  • 可维护性:如果需要更改常量的值,只需在定义处修改一次即可。

3. 示例

以下示例展示了如何使用常量:

public class ConstantExample {
    public static void main(String[] args) {
        final double PI = 3.14159; // 定义圆周率常量
        double radius = 5.0;
        double area = PI * radius * radius; // 使用常量计算圆的面积

        System.out.println("圆的面积: " + area);
    }
}

(三)

1. 标识符的概述

标识符,就是我们给类、方法或变量起的名字。

2. 标识符的命名规则

  • 可以由大小写字母、数字、_(下划线)、 $(美元符号)组成
  • 不能以数字开头
  • 不能使用 Java 中的关键字
  • 严格区分大小写 正例:HelloWorld、number、n1\color{green}{HelloWorld、number、n1}HelloWorldnumbern1 反例:n∗、0number、class\color{red}{n*、0number、class}n0numberclass

3. 标识符的命名规范

严格意义上讲,我们的标识符只要符合命名规则,随便起什么名都可以,Java 在语法上并没有对我们做过多的限制。

但是,要想写出可读性好并且易于维护的代码就必须要有一些命名的规范。否则每个人会都按照自己的想法随便命名,这对于团队开发来说是灾难性的。

小驼峰命名法:

第一个单词的首字母小写,其他单词的首字母大写。(给方法和变量命名) 举例:number、maxValue\color{green}{number、maxValue}numbermaxValue

大驼峰命名法:

所有单词的首字母都大写,其他字母小写。(给类命名) 举例: Student、HelloWorld\color{green}{Student 、HelloWorld}StudentHelloWorld

三、运算符(算术、赋值、自增自减、关系、逻辑、三元、位运算符等)

(一)运算符和表达式的概述:

运算符,对字面量或变量进行操作的符号叫做运算符。 表达式,使用运算符连接起来的式子叫做表达式。

运算符是编程语言中的基本元素,它们用于在表达式中操作数据。Java中提供了多种类型的运算符,以满足不同的编程需求。以下将详细介绍Java中的各种运算符,包括算术运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符、三元运算符和位运算符。

(二)算术运算符

算术运算符用于对数值进行基本的算术操作。Java支持以下算术运算符:

运算符描述示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 22
%取模(余数)5 % 21

需要注意的是,除法运算符/在整数除法时会舍弃小数部分,返回整数结果。

(三)赋值运算符

赋值运算符用于将右侧表达式的值赋给左侧的变量。最常用的赋值运算符是=,除此之外还有复合赋值运算符:

运算符描述示例结果
=赋值a = 5a5
+=加后赋值a += 3a8
-=减后赋值a -= 2a6
*=乘后赋值a *= 2a12
/=除后赋值a /= 3a4
%=取模后赋值a %= 3a1

(四)自增自减运算符

自增和自减运算符用于增加或减少变量的值。Java提供了前缀和后缀两种形式的自增(++)和自减(--)运算符:

运算符描述示例结果
++a前缀自增a = 5; ++a;a6
a++后缀自增a = 5; a++;a6
--a前缀自减a = 5; --a;a4
a--后缀自减a = 5; a--;a4

前缀形式在增加或减少变量值后立即返回新的变量值,而后缀形式则在返回变量原值后再进行增加或减少。

(五)关系运算符

关系运算符用于比较两个操作数,并返回布尔值(truefalse)。常用的关系运算符包括:

运算符描述示例结果
==等于5 == 3false
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于或等于5 >= 3true
<=小于或等于5 <= 3false

(六)逻辑运算符

逻辑运算符用于连接多个布尔表达式。它们的结果也是布尔值:

1. 基本逻辑运算符

(一)Java基础知识复习(语法和基础概念)

2. 短路逻辑运算符

基本逻辑运算符中的逻辑与(&)和逻辑或(|)必须执行表达式中的所有判断,但这其实是不必要的。 举例:

int x = 100;     
int y = 200;     
x > 300 & y < 300 // 在运算左边的判断时结果是 false,其实最终的结果已经确定,右边的判断执行了没有意义! 

要提升逻辑判断的执行效率,可以使用 Java 提供的短路逻辑运算符。 (一)Java基础知识复习(语法和基础概念)

(七)三元运算符

三元运算符(条件运算符)是Java中唯一的三元运算符,用于简化if-else结构。其语法形式为:

条件表达式 ? 表达式1 : 表达式2

当条件表达式为true时,返回表达式1的值,否则返回表达式2的值。

示例:

int a = 5;
int b = 3;
int max = (a > b) ? a : b; // max为5

(八)位运算符

位运算符用于对整数类型的位进行操作。常用的位运算符有:

运算符描述示例结果
&按位与5 & 31
I按位或5 I 67
^按位异或5 ^ 36
~按位非~5-6
<<左移5 << 110
>>右移5 >> 12
>>>无符号右移5 >>> 12

位运算符用于更底层的操作,如与(&)、或(|)、异或(^)、非(~)以及位移操作(<<>>>>>)。

(九)总结

运算符在Java编程中起着至关重要的作用,它们是构建表达式和控制程序逻辑的基础。熟练掌握各种运算符的用法,可以帮助开发者编写高效且易于维护的代码。通过结合不同类型的运算符,开发者能够创建复杂的逻辑和算法,以实现各种功能需求。

四、控制流语句(条件语句、循环语句、分支语句)

在编程中,控制流语句用于控制程序的执行流程。它们决定了程序如何选择执行不同的代码块,以及如何在满足某些条件时重复执行代码。Java提供了强大的控制流语句,包括条件语句、循环语句和分支语句。本文将详细介绍这些控制流语句的用法。

(一)条件语句

条件语句用于根据特定条件的真假来决定是否执行某个代码块。在Java中,主要的条件语句有ifif-elseswitch

1. if语句

if语句用于在条件为true时执行特定代码块。

int number = 10;
if (number > 5) {
    System.out.println("Number is greater than 5");
}

2. if-else语句

if-else语句用于在条件为false时执行另一个代码块。

int number = 3;
if (number > 5) {
    System.out.println("Number is greater than 5");
} else {
    System.out.println("Number is less than or equal to 5");
}

3. if-else if-else语句

if-else if-else语句用于测试多个条件。

int number = 7;
if (number > 10) {
    System.out.println("Number is greater than 10");
} else if (number > 5) {
    System.out.println("Number is greater than 5 but less than or equal to 10");
} else {
    System.out.println("Number is 5 or less");
}

4. switch语句

switch语句用于根据某个表达式的值执行相应的代码块。适用于处理固定值的条件判断。

int day = 2;
switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    default:
        System.out.println("Invalid day");
        break;
}

(二)循环语句

循环语句用于重复执行某个代码块。Java中提供了forwhiledo-while循环。

1. for循环

for循环用于在知道循环执行次数时使用。

for (int i = 0; i < 5; i++) {
    System.out.println("Iteration: " + i);
}

2. while循环

while循环在条件为true时反复执行代码块,适合用于条件控制的循环。

int i = 0;
while (i < 5) {
    System.out.println("Iteration: " + i);
    i++;
}

3. do-while循环

do-while循环先执行代码块,然后测试条件表达式。即使条件为false,代码块至少执行一次。

int i = 0;
do {
    System.out.println("Iteration: " + i);
    i++;
} while (i < 5);

(三)分支语句

分支语句用于在循环中改变控制流。Java中常用的分支语句包括breakcontinuereturn

1. break语句

break语句用于终止循环或switch语句,并跳出到下一个代码块。

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // 终止循环
    }
    System.out.println("Iteration: " + i);
}

2. continue语句

continue语句用于跳过当前迭代的剩余代码,直接进入下一次循环迭代。

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // 跳过偶数
    }
    System.out.println("Iteration: " + i);
}

3. return语句

return语句用于从方法中返回结果,并结束方法执行。

public int add(int a, int b) {
    return a + b; // 返回结果并结束方法
}

(四)总结

控制流语句是编程语言中的关键部分,能够帮助开发者控制程序执行的顺序和逻辑。通过使用条件语句、循环语句和分支语句,可以编写出更灵活和强大的程序,来实现复杂的功能需求。掌握这些控制流语句,是编写高效Java代码的基础。

转载自:https://juejin.cn/post/7395866692771217448
评论
请登录