Java程序设计(基础)

Java思维导图(基础)

Java编程基础知识点总结

一:在Java中,基本语法(变量和常量

变量

1. 定义与声明

  1. 变量是程序运行期间可以改变的值。在Java中,变量必须先声明后使用。
  2. 变量声明的基本语法是:数据类型 变量名;
  3. 例如:int age;

2. 变量类型

  1. Java支持多种数据类型,包括基本数据类型(如int, float, char等)和引用数据类型(如String, 数组, 自定义类等)。

3. 变量命名规则

  1. 变量名必须以字母、下划线(_)、美元符号($)或人民币符号(¥)开始不能以数字开头
  2. 变量名可以由字母,数字,下划线组成。
  3. 变量名可以是任意长度的字符串。
  4. 变量名是大小写敏感的。

4. 变量作用域

  1. 变量的作用域定义了变量在程序中的可见性和生命周期。
  2. 局部变量:在方法或代码块内部声明的变量,只在该方法或代码块内可见。
  3. 实例变量:在类的内部但在方法外部声明的变量,属于类的所有实例。
  4. 类变量(静态变量):使用static关键字声明的变量,属于类本身,而不是类的任何特定实例。

5. 变量初始化

  1. 变量声明后必须进行初始化,即为其赋值。未初始化的变量不能使用。

常量

1. 定义

  1. 常量是在程序运行过程中其值不能被改变的量。
  2. 在Java中,常量可以通过final关键字来声明。

2. 声明与初始化

  1. 常量在声明时必须进行初始化,且之后不能再改变其值。
  2. 例如:final int MAX_VALUE = 100;

3. 常量类型

  1. 常量可以是任何数据类型,包括基本数据类型和引用数据类型。
  2. 但一旦为常量赋值后,就不能再改变其值。

4. 常量命名

  1. 常量名通常全部大写,并使用下划线分隔单词,以区分变量。
  2. 例如:public static final int MAX_AGE = 100;

注意事项

  1. 变量和常量在Java编程中非常重要,它们用于存储和管理程序运行期间所需的数据。
  2. 正确选择和使用变量和常量可以提高代码的可读性、可维护性和性能。
  3. 在设计程序时,应根据实际需求和数据特性来选择合适的变量类型和常量值。

基本语法(运算符和表达式):

运算符

1. 算术运算符

  1. 用于执行基本的算术操作,如加法、减法、乘法、除法和取模。
  2. 包括:+(加法)、-(减法)、*(乘法)、/(除法)、%(取模)。
  3. 注意:在进行除法和取模运算时,如果操作数数据类型是整数,则结果会被截断为整数部分。

2. 赋值运算符

  1. 用于将值赋给变量。
  2. 最基本的赋值运算符是=。
  3. 还有复合赋值运算符,如+=、-=、*=、/=等。

3. 比较运算符

  1. 用于比较两个值的大小关系,返回布尔值(true或false)。
  2. 包括:==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)。

4. 逻辑运算符

  1. 用于对布尔值进行操作,包括&&(逻辑与)、||(逻辑或)、!(逻辑非)。

5. 位运算符

  1. 用于对整数的二进制位进行操作,包括&(按位与)、|(按位或)、^(按位异或)、~(按位非)、<<(左移)、>>(右移)、>>>(无符号右移)。

6. 其他运算符

  1. 如条件运算符(?:)、三元运算符(? :)、instanceof运算符等。

表达式

1. 算术表达式

  1. 由算术运算符和操作数组成,用于完成基本的算术运算。

2. 布尔表达式

  1. 由比较运算符和逻辑运算符组成,用于进行条件判断。

3. 字符串表达式

  1. 用于处理字符串的拼接和比较等操作。

4. 复合表达式

  1. 由多个表达式通过运算符组合而成,可以嵌套使用。

 二:数据类型


Java是一个强类型语言,Java中的数据必须明确数据类型。数据类型的作用就是约束变量存储数据的形式。例如,定义为int类型存储整数,定义为double类型存储小数
public static void main(string[] args) {
int age = 25;
double  money =9.2;
Java中的数据类型包括基本数据类型引用数据类型两种:
1.基本数据类型
基本数据类型共分为4大类8种,如下:
整数类型:byte,short,int(默认),long
浮点数类型:float,double(默认)
字符类型:char
布尔类型:boolean
2.引用数据类型
除上述8种基本类型外,剩下的都是引用类型,最常用的是String字符串类型
2.计算机底层都是一些数字电路(可以理解成开关),用开表示0、关表示1,这些0 1的形式就是二进制。正是因为计算机只能表示二进制,所以数据在计算机底层都是采用二进制存储的。
在计算机中认为一个开关表示的0 1称为1位(b),每8位称为一个字节(B),所以1B=8b,字节是计算机中数据的最小单位。
计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,通常用大写字母”B”表示,字节是由连续的8个位组成。除了字节外还有一些常用的存储单位,其换算单位如下:
1B(字节)=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB= 1024GB

三:Java中流程控制(选择结构):

知识点

  1. if选择结构
    • 单if语句:根据单个条件判断执行相应的代码块。
    • if-else语句:根据条件判断,如果条件为真,执行if后的代码块;否则执行else后的代码块。
    • 多重if:可以连续使用多个if语句进行条件判断,根据条件逐步执行相应的代码块。
    • 嵌套if:在if或else的代码块中可以再次使用if语句,形成嵌套结构。
  1. switch选择结构
    • switch语句用于处理多个条件的情况,它根据表达式的值匹配case标签,并执行相应的代码块。
    • 每个case标签后通常需要使用break语句来终止switch语句的执行,否则程序会继续执行下一个case的代码块,这被称为case穿透。
    • 可以使用default标签来处理所有case都不匹配的情况。

难点

  1. 条件表达式的理解:正确理解和编写条件表达式是选择结构的关键。需要掌握比较运算符和逻辑运算符的用法,以及它们的优先级和结合性。
  2. 嵌套结构的处理:嵌套的选择结构会增加代码的复杂度,需要正确理解代码的执行流程,避免出现逻辑错误。
  3. switch语句的匹配:switch语句的匹配规则需要注意,特别是当表达式的值是多个case标签的公共前缀时,只有第一个匹配的case会被执行。
  4. break语句的使用:在switch语句中,break语句的作用是终止switch语句的执行,防止case穿透。但在某些情况下,可能不需要使用break语句,例如在多个case需要执行相同的代码块时。

四:Java中流程控制(循环结构):

知识点用于处理重复的任务,如遍历数组、字符串或执行重复的计算

  1. for循环
    • 主要用于循环次数已知的情况。
    • 语法:for(初始化; 条件判断; 迭代){ 循环体 }
    • 执行顺序:初始化 -> 条件判断 -> 执行循环体 -> 迭代 -> 条件判断...
  1. while循环
    • 当给定条件为真时,循环会持续执行。
    • 语法:while(条件判断){ 循环体 }
    • 通常用于在特定条件下执行重复任务。
  1. do-while循环
    • 至少执行一次循环体,然后判断条件。
    • 语法:do{ 循环体 } while(条件判断);
    • 在条件判断之前先执行一次循环体。
  1. 嵌套循环
    • 一个循环体内可以包含另一个或多个循环。
    • 注意控制循环的层次,一般不建议超过三层。
  1. 循环控制语句
    • break:用于退出当前循环。
    • continue:用于跳过当前循环的剩余部分,进入下一次循环。

注意点

  1. 循环条件
    • 循环条件必须明确,否则可能导致无限循环。
    • 循环条件应能够在某个时刻变为false,以便循环能够终止。
  1. 循环体
    • 循环体中的代码应该尽量简洁、高效。
    • 避免在循环体内进行不必要的操作,尤其是资源密集型的操作。
  1. 迭代
    • 在循环中,迭代部分应确保循环变量能够适当地变化,以便循环能够逐渐接近结束条件。
  1. 死循环
    • 要特别注意避免死循环,即循环条件永远为true的情况。
  1. 性能考虑
    • 循环结构可能会对性能产生影响,特别是在处理大量数据时。
    • 在设计循环结构时,应充分考虑性能优化。

要避免Java中的循环结构陷入死循环,可采取以下一些策略:

  1. 明确循环条件
  2. 确保你明确定义了循环的终止条件,并且这个条件最终一定会被满足。循环条件应该反映了你想要达到的目的,并且应该是可以被计算的,不能依赖于循环体内无法改变的状态。
  3. 使用正确的数据类型
  4. 确保循环条件中使用的变量类型是正确的,避免整数溢出或者浮点数精度问题导致的死循环。例如,当使用整数作为循环计数器时,确保你不会使其超出int类型的范围。
  5. 递增/递减变量
  6. 在循环体中,确保你有一个递增或递减的操作,以便循环变量在每次迭代后都朝着终止条件移动。没有递增/递减操作可能会导致循环永远不会达到终止条件。
  7. 限制循环次数
  8. 如果可能的话,设置一个最大迭代次数来避免死循环。这可以通过在循环条件中引入计数器来实现。如果达到最大迭代次数仍然没有找到解决方案,那么应该考虑中断循环。
  9. 使用break语句
  10. 在循环体内部,如果检测到某种情况表明不需要继续循环,可以使用break语句来提前结束循环。

  

五:在Java编程基础中,方法):

  1. 定义:方法是Java程序中执行特定功能的代码块。它是一组语句的集合,这些语句在一起执行一个任务或操作。
  2. 结构:一个方法的基本结构包括方法名、参数列表、方法体和方法返回类型。方法名描述了方法的功能;参数列表包含传递给方法的输入值;方法体包含执行操作的代码;方法返回类型指定方法执行后返回的数据类型。
  3. 参数:方法可以有参数,也可以没有参数。参数是传递给方法的值,可以是基本数据类型(如int, double等)或对象引用。在方法声明时定义参数,并在方法调用时传递参数。
  4. 返回类型:方法可以有返回类型,也可以没有返回类型(void)。返回类型指定了方法执行完毕后返回给调用者的数据类型。如果方法没有返回任何值,则声明为void类型。
  5. 方法调用:通过方法名加上括号(可能包含参数)来调用方法。调用方法时,程序会跳转到方法的代码块并执行其中的语句。执行完毕后,控制流会返回到调用方法的位置。
  6. 方法重载(Overloading):在同一个类中,可以定义多个同名但参数列表不同的方法,这就是方法重载。Java编译器会根据调用方法时提供的参数类型和数量来确定调用哪个方法。
  7. 方法重写(Overriding):在子类中,可以定义一个与父类中同名且参数列表相同的方法,这就是方法重写。子类中的重写方法会覆盖父类中的同名方法,从而在运行时调用子类的方法。
  8. 静态方法与非静态方法:静态方法属于类,而非静态方法属于类的实例。静态方法可以直接通过类名调用,而非静态方法需要通过类的实例(对象)来调用。
  9. 访问修饰符:方法可以有不同的访问修饰符,如public、private、protected和默认(无修饰符)。这些修饰符决定了方法的可见性和访问范围。
  10. 局部变量与成员变量:在方法内部声明的变量是局部变量,只在方法内部有效。而在类中但在方法外声明的变量是成员变量(或称为实例变量),它们属于类,可以在整个类的方法中访问。

  

六:Java中数组的详细内容整理

一、数组的定义

在Java中,数组是一种数据结构,用于存储固定数量的相同类型的元素。数组可以是一维的,也可以是多维的。

  1. 一维数组
    • 静态初始化:int[] array1 = {1, 2, 3};
    • 动态初始化:int[] array2 = new int[]{1, 2, 3}; 或 int[] array3 = new int[5];(默认值为0)
  1. 多维数组
    • 例如,二维数组:int[][] matrix = new int[3][4];

二、数组的访问和操作

  1. 访问数组元素
    • 使用索引来访问数组中的元素,如 array[0] 访问第一个元素。
  1. 遍历数组
    • 使用for循环来遍历数组中的每个元素。
  1. 修改数组元素
    • 可以直接通过索引来修改数组中的元素值。

三、数组的常见操作

  1. 数组排序
    • 使用 Arrays.sort() 方法对数组进行排序。
    • 数组排序:Arrays.sort();
      int[ ] arrayA = new int[ ]{5,10,-2,0,20};
      //对数字从小到大排序
      Arrays.sort(arrayA);
      System.out.println(Arrays.toString(arrayA));
      String[] strArrays = new String[]{"car","apple","dog","box","abandon"};
      //指定位置排序,对0-3位置排序,不包括3
      Arrays.sort(strArrays,fromindex: 0, tolndex:3);
    • System.out.println(Arrays.toString(strArrays));//对字符串从小到大排序
      Arrays.sort(strArrays);
      System.out.println(Arrays.toString(strArrays));
    • //反向排序
      Arrays.sort(strArrays, Collections.reverse0rder());
      System.out.println(Arrays.toString(strArrays));
      运行:D:\Java\jdk1.8.@_3@1\bin\java.exe..
      Connected to the target VM, address:
      [-2,0,5,10, 20]
      [apple, car, dog, box, abandon]
      [abandon, apple, box, car, dog]
      [dog, car, box, apple, abandon]
  1. 数组复制
    • 使用 System.arraycopy() 或 Arrays.copyOf() 方法来复制数组。
  1.  复制数组:Arrays.copyOf( );
    int[ ] arrayA = new int[ ]{5,10,-2,0,20};
    //复制,newLength新数组的长度
    int[ ] ints = Arrays.copyOf(arrayA, newLength:4);
    System.out.println(Arrays.toString(arrayA));
    System.out.println(Arrays.toString(ints));
    运行:
    D:\Java\jdk1.8.@_3@1\bin\jav 
    Connected to the target VM,
    [5,10,-2,0,20]
    [5,10,-2, 0]

  1. 填充数组:Arrays.fill( )
  1.     int[ ] arrayA = new int[5];
    // 给数组所有位置赋值3
    Arrays.fill(arrayA, val: 3);
    // Arrays.toString()方法将数组中的内容全打印出来
    System.out.println(Arrays.toString(arrayA));

    //给第2-4位赋值为6,e开始,包括2,不包括4
    Arrays.fill(arrayA,fromindex: 2, tolndex:4,val: 6);
    System.out.println(Arrays.toString(arrayA));
    运行:
    D:\Java\jdk1.8.@_3@1\bin\java.exe  Connected to the target VM, address:
  2. [3,3,3,3, 3]
    [3,3,6,6, 3]

4.数组比较

    Arrays.equals( );//比较数组元素是否相等
int[ ] arrayA = new int[ ]{1,4,5};
int[ ] arrayB = new int[ ]{1,4,5};
System.out.println(Arrays.equals(arrayA,arrayB));
查看equals( )方法:
public static boolean equals( int[]a,int[]a2){
if (a==a2)
    return true;
if (a==null || a2==nul1)
    return false;
int length = a.length;
if (a2.length != length)
    return false;
for (int i=0;i<length;i++)
    if (a[i] != a2[i])
        return false;
return true;

}

所以比较的是每个位置上的元素是否相等,全部相等,才返回true。

     

四、数组与集合的区别

  1. 数组:固定大小,用于存储基本数据类型。
  2. 集合(如ArrayList):动态大小,用于存储对象,并提供了更多的功能和方法。

五、注意事项

  1. 数组越界:访问超出数组范围的索引会导致 ArrayIndexOutOfBoundsException。
  2. 数组初始化:如果动态初始化的数组没有赋值,其元素会被初始化为默认值(如0对于整数类型)。
  3. 数据类型:数组中的所有元素必须是相同的数据类型。

六、数组的性能

  1. 数组在内存中是连续存储的,因此访问数组元素的速度很快。
  2. 但数组的大小是固定的,如果需要动态调整大小,可能需要考虑使用其他数据结构,如ArrayList。

七、多维数组的内存布局

  1. 多维数组在内存中也是连续存储的,但其结构更为复杂。对于二维数组,它实际上是一个“数组的数组”。

八、总结

  1. 数组是Java中的一个基本数据结构,用于存储固定数量的同类型元素。
  2. 数组支持静态和动态初始化,并提供了一系列的操作方法,如排序、复制和搜索。
  3. 但需要注意数组越界和正确的数据类型使用,以及根据需求选择数组或集合。

 Java面向对象三大特性和语法基础思维导图

Java中面向对象重点知识点的总结

一、面向对象的基本概念

  1. 对象 (Object): 现实世界中的实体,如人、车、动物等,都可以视为对象。在Java中,对象是类的实例。
  2. 类 (Class): 描述具有相同属性和行为的对象的模板或蓝图。类定义了对象的结构(属性)和行为(方法)。
  3. 封装 (Encapsulation): 将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法进行操作。
  4. 继承 (Inheritance): 子类可以继承父类的属性和行为,并可以添加新的属性和行为或重写父类的方法。
  5. 多态 (Polymorphism): 同一个操作作用于不同的对象,可以产生不同的结果。这主要通过方法重载和方法重写实现。

二、Java中的面向对象特性

  1. 封装 (Encapsulation)
    • 使用private关键字隐藏对象的内部状态。
    • 提供公共的getter和setter方法来访问和修改私有属性。
  1. 继承 (Inheritance)
    • 使用extends关键字来创建一个子类,继承父类的属性和方法。
    • 子类可以重写父类的方法(方法重写)。
    • 使用super关键字来访问父类的属性和方法。
    • 使用final关键字来防止类被继承或方法被重写。
  1. 多态 (Polymorphism)
    • 方法重载(Overloading):在同一个类中,可以有多个同名但参数列表不同的方法。
    • 方法重写(Overriding):子类可以重写父类中的方法。
    • 构造方法不能被重写。
    • 重写的方法必须具有相同的方法名和参数列表。
    • 重写的方法的返回类型应该与父类中被重写的方法的返回类型相同或是其子类型。
    • 重写的方法不能抛出比父类中被重写的方法更多的检查型异常。
  1. 抽象类 (Abstract Class)
    • 使用abstract关键字定义抽象类。
    • 抽象类不能被实例化。
    • 抽象类中可以定义抽象方法和非抽象方法。
    • 子类继承抽象类时,必须实现抽象类中的所有抽象方法,除非子类也是抽象类。
  1. 接口 (Interface)
    • 接口是一种特殊的抽象类,只包含常量和抽象方法。
    • 使用implements关键字来实现接口。
    • 接口可以被多个类实现,实现类必须实现接口中的所有方法。
    • 接口之间可以继承,使用extends关键字。

三、其他相关知识点

  1. 访问控制修饰符 (Access Modifiers): 包括private、protected、default(包访问权限)和public。它们用于控制类、属性和方法的访问权限。
  2. 内部类 (Inner Classes): 一个类可以定义在另一个类的内部,这样的类称为内部类。内部类可以直接访问外部类的私有属性和方法。
  3. 静态类 (Static Classes): 使用static关键字定义的类,静态类只能直接访问外部类的静态属性和方法。
  4. 局部内部类 (Local Inner Classes): 在方法中定义的内部类。
  5. 匿名内部类 (Anonymous Inner Classes): 没有名称的内部类,主要用于简化代码。
  6. Lambda 表达式: 从Java 8开始,Lambda表达式提供了一种更简洁的方式来表示匿名函数。

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值