JAVA基础学习日记(一)
工程与模块管理
project>module>package
环境变量配置技巧:
- XXX_HOME变量的变量值指向的是bin目录的上一级
- PATH变量的变量值指向的是bin目录
软件:即一系列按照特定顺序组织的计算机的数据和指令的集合。有系统软件和应用软件之分。
强制数据类型转换:
转换顺序:byte、short、char->int->long->float->double
特别地,byte、short、char类型之间做运算,结果为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
&与&&的区别:
执行过程:
- 如果符号左边是true,则&、&&都会执行符号右边的操作;
- 如果符号左边是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 配合break或continue使用,如下举例表示带标签的for:
label:for(){ break label; continue label; }
数组:
整型数组元素的默认初始值为:0;
浮点型数组元素的默认初始值为:0.0;
字符型数组元素的默认初始值为:0或理解为'\u0000';
boolean型数组元素的默认初始值为:false;
引用数据类型数组元素的默认初始值为:null。
对于二维数组,可以将其每一项看作是另一个一维数组的元素而存在。
其实从数组底层的运行机制来看,并没有多维数组。
方法的重载(overload)
- 定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。满足这样特征的多个方法,彼此之间构成方法的重载。
- 总结为:“两同一不同” 。两同:同一个类、相同的方法名;一不同:参数列表不同;① 参数个数不同 or ② 参数类型不同
注意:方法的重载与形参的名、权限修饰符、返回值类型都没有关系。
可变个数形参的方法(jdk5.0)
使用场景:
在调用方法时,可能会出现方法形参的类型是确定的,但是参数的个数不确定。此时,我们就可以使用可变个数形参的方法
格式:(参数类型 ... 参数名)
说明:
- 可变个数形参的方法在调用时,针对于可变的形参赋的实参的个数可以为:0个、1个或多个
- 可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载
- 特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载。
- 可变个数的形参必须声明在形参列表的最后
- 可变个数的形参最多在一个方法的形参列表中出现一次
方法的值传递机制
对于方法内声明的局部变量来说:如果出现赋值操作,
- 如果是基本数据类型的变量,则将此变量保存的数据值传递出去。
- 如果是引用数据类型的变量,则将此变量保存的地址值传递出去。
方法的参数的传递机制:值传递机制
形参:在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。
实参:在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。
实参给形参赋值的过程
如果形参是基本数据类型的变量,则将实参保存的数据值赋给形参。
如果形参是引用数据类型的变量,则将实参保存的地址值赋给形参。
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();

浙公网安备 33010602011771号