JAVA基础学习日记(一)

工程与模块管理

project>module>package

环境变量配置技巧:

  1. XXX_HOME变量的变量值指向的是bin目录的上一级
  2. PATH变量的变量值指向的是bin目录

软件:即一系列按照特定顺序组织的计算机的数据和指令的集合。有系统软件和应用软件之分。

强制数据类型转换:

转换顺序:byte、short、char->int->long->float->double

特别地,byteshortchar类型之间做运算,结果为int类型。

^运算,追求的是“异”
a=true;b=true; a^b=false
a=false;b=true; a^b=true
a=true;b=false; a^b=true
a=false;b=false;a^b=false

&与&&的区别:
执行过程:

  1. 如果符号左边是true,则&、&&都会执行符号右边的操作;
  2. 如果符号左边是false,则&继续执行符号右边的操作,而&&不会执行符号右边的操作。

|与||的区别:
执行过程:
1.如果符号左边是false,则|、||都会执行符号右边的操作;
2.如果符号左边是true,则|继续执行符号右边的操作,而||不会执行符号右边的操作。


<< 左移运算,在一定范围内,每左移一位,结果就在原有基础上*2(正、负都适用)。
>> 右移运算,在一定范围内,每右移一位,结果就在原有基础上/2(正、负都适用)。
>>>无符号右移运算,往右移动后,左边空出来的位置直接补0(正、负 都适用)。

无中间变量实现两个数的交换伪代码:

1 int m,n;
2 m=m^n;
3 n=m^n;
4 m=m^n;

实际使用场景中,凡是可以使用条件运算符的位置,都可以使用if-else结构来改写,但是使用if-else结构的位置不一定可以使用条件运算符来改写。在二者都可实现的情况下,优先使用条件运算符,因其效率稍高

随机数的简单使用举例:

//需求:获取一个[a,b]范围内的随机整数
实现方式:int num = (int)(Math.random()*(b-a+1))+a;

循环:
①:初始化条件
②:循环条件——一定是boolean类型的变量或表达式
③:循环体
④:迭代部分

for循环:

for(①;②;④){
  ③;
}
//执行过程:①->②->③->④->②->③->④->......

while循环:

while(②){
  ③;
  ④;
}
//执行过程:①->②->③->④->②->③->④->......

区别初始化条件的作用域范围不同。while循环中的初始化条件在while循环结束后,仍然有效。

do while循环:

do{
  ③;
  ④;
}while(②);
//执行过程:①->③->④->②->③->④->②->......

:do while至少执行一次循环体。

label 配合breakcontinue使用,如下举例表示带标签的for:

label:for(){
  break label;
  continue label;
}

数组:

  整型数组元素的默认初始值为:0
  浮点型数组元素的默认初始值为:0.0
  字符型数组元素的默认初始值为:0或理解为'\u0000'
  boolean型数组元素的默认初始值为:false
  引用数据类型数组元素的默认初始值为:null

对于二维数组,可以将其每一项看作是另一个一维数组的元素而存在。
其实从数组底层的运行机制来看,并没有多维数组。

方法的重载(overload)

  1.  定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。满足这样特征的多个方法,彼此之间构成方法的重载
  2. 总结为:“两同一不同” 。两同:同一个、相同的方法名;一不同:参数列表不同;① 参数个数不同 or ② 参数类型不同

注意:方法的重载形参的名权限修饰符返回值类型没有关系。

可变个数形参的方法(jdk5.0)

使用场景:

  在调用方法时,可能会出现方法形参的类型是确定的,但是参数的个数不确定。此时,我们就可以使用可变个数形参的方法

格式:(参数类型 ... 参数名)

说明:

  1. 可变个数形参的方法在调用时,针对于可变的形参赋的实参的个数可以为:0个、1个或
  2. 可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载
  3. 特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数构成重载。
  4. 可变个数的形参必须声明在形参列表的最后
  5. 可变个数的形参最多在一个方法的形参列表中出现一次

方法的值传递机制

对于方法内声明的局部变量来说:如果出现赋值操作,

  • 如果是基本数据类型的变量,则将此变量保存的数据值传递出去。
  • 如果是引用数据类型的变量,则将此变量保存的地址值传递出去。

方法的参数的传递机制:值传递机制

形参:在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参
实参:在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参

实参给形参赋值的过程 

如果形参是基本数据类型的变量,则将实参保存的数据值赋给形参。
如果形参是引用数据类型的变量,则将实参保存的地址值赋给形参。

 Scanner类使用时的注意事项:

当一个类中有两个两个以上的Scanner实例时,其中一个Scanner类的实例执行scanner.close()方法会关闭其他潜在的InputStream流。因为Scanner对象在关闭时,也会自动调用它的输入流进行关闭,也就是scanner.close()的时候,会导致System.in的关闭,导致其他Scanner的扫描器无法读取输入流scanner不能再次获取输入。例如下列示例:

Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        scanner.close();
        Scanner scanner1 = new Scanner(System.in);
        int b = scanner1.nextInt();
        scanner1.close();
//Exception in thread "main" java.util.NoSuchElementException

所以有两种解决方案:

一、全局使用一个scanner对象,并且只在整个程序运行结束的时候只关闭一次scanner。

Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        scanner.close();

二、使用完不关闭,需要使用的地方再次创建。

Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        Scanner scanner1 = new Scanner(System.in);
        int b = scanner1.nextInt();
        scanner.close();
posted @ 2024-06-24 18:29  知责正念  阅读(11)  评论(0)    收藏  举报