键盘录入:
import java.util.Scanner;
class Input{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int x = sc.nextInt();
System.out.println(x);
}
}
java选择语句中表达式的结果必须是布尔类型,也就是只能是true、false。
if语句控制的语句体如果是一条语句,大括号可以省略;(最好不要省略)
通过if语句给未赋值变量时:
class IfTest{
public static void main(String[] args){
int x = 3;
int y;
if(x==3){
y = x;}
else{y = 0;}
}
System.out.println(y)
}
//运行正确
class IfTest{
public static void main(String[] args){
int x = 3;
int y;
if( x==3 ){
y = x;}
else if (x != 3){
y = 0;}
}
System.out.println(y)//可能尚未赋值的y
}
//运行错误
class IfTest{
public static void main(String[] args){
int x = 3;
int y;
if( x==3 ){
y = x;}
else {
x++;}
}
System.out.println(y)//可能尚未赋值的y
}
//运行错误
switch语句后面是条件表达式,可以支持各种类型
case后面只能是常量不能是变量。
default语句可以省略,也可以放在任意位置,但都是最后执行
break省略会导致case语句穿透情形
int x = 3;
int y = 4;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println(y)//6
循环标识符:
a:for(int i=1;i<10;i++){
b:for(int j=1;j<i;j++){
System.out.print("*");
break a;}//退出a循环
System.out.println();
}
数组默认初始化值:
整数类型:byte,short,int,long默认初始值都是0
浮点类型:float,double默认初始值都是0.0
布尔类型:boolean默认初始值false。
字符类型:char默认初始值为’\u0000’。
内存:
栈:存储局部变量(先进后出)
堆:存储new出来的数组或对象
静态数组:
1、数据类型[ ]数组名 = new 数据类型[ ]{元素1,元素2,元素3,…}
2、数据类型[ ]数组名 = {元素1,元素2,元素3,…}
如下
int[] arr1 = new int[5]{1,2,3};//报错,不允许动静结合
int[] arr1 = new int[]{1,2,3};
int[] arr2 = {1,2,3};
对于第二种方法不能先声明再赋值
int[] arr3;
arr3 = new int[]{1,2,3};//正确
int[] arr2;
arr2 = {1,2,3};//报错
二维数组:
第一种赋值方式
int[][] a = new int[3][2];
System.out.println(a);//a的地址
System.out.println(a[1]);//a[1]的地址
第二种赋值方式
int[][] a = new int[3][];
a[0] = new int[3];
a[1] = new int[5];
System.out.println(a);//a的地址
System.out.println(a[1]);//a[1]的地址
System.out.println(a[2]);//默认值null
第三种赋值方式
int [][] arr = {{1,2},{2,31,42},{1}}
基本数据类型的值传递,不改变原值
引用数据类型(例如数组),改变原值,传递的是地址。
java到底是传值还是传址,答案传值,这是高司令(java之父说的)wtf?