Java学习笔记--数据类型、运算符、选择语句、循环语句、方法、数组介绍,java学习笔记
分享于 点击 43043 次 点评:280
Java学习笔记--数据类型、运算符、选择语句、循环语句、方法、数组介绍,java学习笔记
文章目录
- Java引入
- 基本数据类型
- 运算符
- 选择语句
- 循环语句
- 方法
- 数组
- Java动态内存分配
Java引入
- java跨平台靠不同平台下的JVM
- JRE(Java Runtime Environment)java运行环境,包括Java虚拟机和程序所需核心类库。
- JDK(Java Development Kit)java开发工具包,包含了java开发工具,例如编译工具javac.exe、打包工具jar.exe等。
- javac命令能够将.java文件编译成.class文件,而java命令则能够运行.class文件(不需要加后缀.class)。
- javac命令后面跟的是java文件名+扩展名,而java命令后面跟的是类名不带扩展名。
基本数据类型
- java中的关键字全部为小写。
- 标识符包括数字、字母、下划线、数字和$,不能以数字开头。
- 包(也就是文件夹,用于区分相同名字的类)名为小写字母。
- 类或接口类名每个单词首字母大写。
- 方法或变量名,首单词首字母小写,后面单词首字母大写。
- 常量名全部大写,单词中间用下划线隔开。
- 字符常量用单引号,字符串常量用双引号。
- 0b开头的数字为二进制,0开头为8进制,0x开头为16进制。
- java数据类型分为两种,一种是基本数据类型,另一种是引用数据类型。基本数据类型又包括数值型、字符型和布尔型。引用数据类型有类、接口和数组。整数中的byte占1字节,short占2字节,int占4字节,long占8字节;浮点数中的float占4字节,double占8字节;字符char占2字节;布尔boolean占1字节。
- 默认整型为int,默认浮点型为double。long类型在数字后面加上L。float类型在后面加上F。
- 不同类型的数值参与运算,会进行默认转换,byte、short、char-int-long-float-double。如果要进行大数据类型到小数据类型的转换,需要进行强制转换,强制转换的格式如下:
- 目标数据类型 变量 = (目标数据类型)(被转换的数据)
public class HelloWorld {
public static void main(String [] args){
short b1 = 1,b2 = 2,b;
b = b1+b2;//这句话会报错,因为变量运算会先转为int类型
b = 1+2;//这句话正常,因为常量运算先将结果计算出来(实际上还是int类型的运算),看是否在short的范围内,如果在就不报错
b = 8;//执行时,8默认是int类型,赋值时会做数据检测,如果不在范围内就报错
}
}
- 字符数据可以参与运算,如’a’等于97,'A’等于65,'0’等于48。
- 字符串和其他数据做+,结果是字符串类型。这里的+表示字符串连接符。
public class HelloWorld {
public static void main(String [] args){
System.out.println("hello"+'a'+1);//输出结果为helloa1
System.out.println('a'+1+"hello");//输出结果为98hello
}
}
运算符
- 运算符的种类:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符
- 算术运算符:+,-,*,/,%,++,–
- 整数相除只能得到整数,若要得到小数,需要将其中一个数据变为浮点型。
- ++,–单独使用时:放在操作数的前面和后面效果一样;参与运算使用时:放在操作数前面,先自增或者自减,然后再参与运算;放在操作数后面,先参与运算,再自增或者自减。
- 扩展的赋值运算符(例如+=)隐含了强制的类型转换。s += 1不是等价于s = s + 1,而是s = (s的数据类型)(s+1)。
public class HelloWorld {
public static void main(String [] args){
short s = 1;
s = s + 1;//报错。因为数据类型会默认转为int
s += 1;//不报错。因为隐含了强制数据类型转换
}
}
- 关系运算符的结果必是布尔型,逻辑运算符(&,|,^,!)用来连接布尔型数值,其结果也必是布尔型。
- 需要注意一点的是逻辑运算符还有&&和||,它们与上面的区别就是当左边的结果已经能够决定最终的结果时,右边的语句不执行。即当使用&&时,左边为false,终止执行;当使用||时,左边为true,终止执行。
- 位运算符是在二进制补码的基础之上进行操作的,包括按位与&,按位或|,按位异或^,按位取反~。
//实现两个整数变量的交换
public class HelloWorld {
public static void main(String [] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
}
}
//实现两个整数变量的交换
public class HelloWorld {
public static void main(String [] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
a = a^b;
b = a^b;//异或同一个数两次,结果不变
a = a^b;
System.out.println("a:"+a+",b:"+b);
}
}
//实现两个整数变量的交换
public class HelloWorld {
public static void main(String [] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
a = a+b;
b = a-b;
a = a-b;
System.out.println("a:"+a+",b:"+b);
}
}
//实现两个整数变量的交换
public class HelloWorld {
public static void main(String [] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
a = (a+b) - (b=a);
System.out.println("a:"+a+",b:"+b);
}
}
- <<:左移 左边最高位丢弃,右边补零;>>:右移 最高位时0,左边补零,最高位是1,左边补1。>>>:无符号右移 无论最高位是0还是1,左边补0。
- 三目运算符 (关系表达式)?表达式1:表达式2,如果辨析表达式的结果为true,取表达式1,否则取表达式2。
import java.util.Scanner;
public class HelloWorld {
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
System.out.println("please input the first number:");
int x = sc.nextInt();
System.out.println("please input the second number:");
int y = sc.nextInt();
int sum = x+y;
System.out.println("sum:"+sum);
}
}
选择语句
- if语句的格式:
if(关系表达式){
语句体
}
- 一个注意点:大括号存在的地方不要用分号。
- switch语句的格式:
//switch后面的表达式可以是:byte,short,int,char,枚举,字符串
switch(表达式){
case value 1://case后面的必须是常量,不能是变量
语句体1;
break;//用来退出switch语句体
case value 2:
语句体 2;
break;
...
default:
语句体 n+1;
break;//可省略
}
循环语句
- for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
/*
执行流程:
A. 执行初始化语句
B. 执行判断条件语句,看其结果是true还是false。如果是false,循环结束;如果是true,继续执行。
C. 执行循环体语句。
D. 执行条件控制语句。
E. 回到B继续执行。
*/
- while循环语句格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
/*
执行流程与for循环一致。
*/
- do-while循环语句格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
- 三个循环的区别:do-while循环首先执行一次循环,无论条件是否满足;for循环执行后变量会被释放,不能再使用,而while循环的初始化变量因为在外部定义,可以在退出循环后继续使用。
- java中可以使用标号与break配合来跳出外层循环。
public class HelloWorld {
public static void main(String [] args){
outer: for(int i=1;i<10;i++){
System.out.println("i = " + i);
inner: for(int j=1;j<10;j++){
System.out.println("j = " + j);
break outer;
}
}
}
}
方法
- 方法的格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){
方法体语句;
return 返回值;
}
- 方法重载:方法名相同,参数列表不同,与返回值类型无关
数组
- 数组是存储同一种数据类型多个元素的集合。也可以看成一种容器。数组既可以存储基本数据类型,也能存储引用数据类型。
- 数组定义格式:
//数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[5];
//等号左边[]:代表数组,几个中括号就代表几维数组
//上面是动态初始化,只定义数组长度,由系统给出初始化值。
//还有一种是静态初始化,给出初始化的值,由系统决定长度。
- new出来的对象:整数类型的默认初始化值是0,浮点型的默认初始化值是0.0,布尔型的默认初始化值是false,字符型的默认初始化值是’\u0000’,引用型的默认值是null。
Java动态内存分配
- java虚拟机运行时数据区:Java虚拟机栈,Java堆,方法区,本地方法栈和程序计数器(program counter register)。
- java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
- 通常会将局部变量表部分称为栈,局部变量表存放了编译期间可知的各种基本数据类型、引用对象和returnAddress类型(指向一条字节码指令的地址)。
- 堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例。
- 方法区与堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
- 静态方式定义数组:
int[] arr = new int[]{1,2,3};
int[] arr = {1,2,3};
//第一种方式可以将声明和赋值分开写,第二种方式必须写在同一行,即第一种方式还可以写为:
int[] arr;
arr = new int[]{1,2,3};
//还有一种较为不常见的定义方式,就是将中括号放在变量名的后面:
int ary[] = new int[3];
- 获取数组长度使用属性名length,即arr.length。
- 二维数组的定义格式:
//定义一个二维数组,含有3个一维数组,每个一维数组又有4个元素
int[][] arr = new int[3][4];
//另外还有两种定义方式,不常用
int arr[][] = new int[3][4];
int[] arr[] = new int[3][4];
- 访问其中每一个一维数组地址的方式为:arr[i]
- 以上的二维数组定义方式为,每一个二维数组中的一维数组的长度固定。其实还可以让其中每个一维数组长度变化。
int[][] arr = new int[3][];
arr[0] = new int[4];
arr[1] = new int[5];
arr[2] = new int[8];
- 与一维数组一样,二维数组的定义方式除了有动态定义,还有静态定义方式,也就是在初始化时就将值赋好。
//保持每一个一维数组长度固定
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//采用简化方式静态定义,每个一维数组长度不定
int[][] arr = {{1,2,3},{4,5},{6}}
- java中参数的传递就是值的复制传递,基本数据类型传递数据本身的值,而引用数据类型(如数组)传递表示地址的值。
相关文章
- 暂无相关文章
用户点评