Java学习第二天

Java学习第二天

数据类型

基本数据类型

Java有8个基本数据类型:
byte,short,int,long,float,double,char,boolean

基本数据类型的使用

public static void main(String[] args){
	int age = 20;
	double money = 3472.3;
	float height = 1.75;
	byte b = 20;
	short s = 30;
	long l = 100L;//后面加个L来表示这是一个long类型的数据,可以写也可以不写(int类型数据会自动类型提升成long类型)
	char = 'a';
	boolean = flase;
}

引用类型

暂时先介绍String类型,对象,数组也属于引用类型

String的使用

public static void main (String[] args){
	String name ="Mark"}

类型介绍

byte

长度8 位,用于表示最小数据单位,如文件中数据,最大表示范围 -128~127

默认值 0

short

长度16 位,很少用,最大表示范围 -32768 ~ 32767

默认值 0

int

长度32位,最常用,最大表示范围 -2^31-1 ~ 2^31

默认值 0

long

长度64位,较常用,最大表示范围 -2^63-1 ~ 2^63,使用时可以加上后缀L / l用来区分,也可以不加(建议加上用以区分)

默认值 0

float

长度32位,较常用,1位符号位,8位指数,23位有效尾数,后缀需要加 F / f

默认值 0.0

double

长度64位,最常用,1位符号位,11位指数,52位有效尾数,使用时可以加上后缀D / d用来区分,也可以不加

默认值 0.0

char

长度16位,是整数类型,用单引号括起来的1个字符(可以是中文字符),使用 Unicode 码代表字符,0~2^16-1(65535)

默认值 “空字符”(\u0000)

boolean

长度8位,最常用,只有两个值true和false

默认值 false

自动类型转换

byte–>short–>int–>long–>float–>double

byte需要注意的地方

public static void main(String[] args){
	byte b1 = 10;
	byte b2 = 20;
	//byte b3 = b1+b2 这里会报错,byte类型做运算时会自动类型转换成int类型后再赋值给b3
	byte b3 = (byte)(b1+b2);
	int i = b1+b2
}

short需要注意的地方

public static void main(String[] args){
	short s1 = 10;
	short s2 = 20;
	//short s = s1+s2 这里会报错,原因同byte
	short s3 =short)(s1+s2);
	int i = s1+s2;
	short s = 0;
	//s = s+1; 会报错原因同上
	s+=1;//这样是正确的
}

直接量(字面量)

字面量是用于表达一个固定值的表示法,由字母,数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值。
通常可以分为字符串字面量、整数字面量、浮点数字面量、布尔字面量、字符字面量和空字面量。

例如:

int a = 10;
String s = "abc";
double d = 3.1415926;
boolean b = true;

像上面的赋值运算中,右边的值都称之为字面量或直接量。

字面量在Java虚拟机(JVM)中的运行机制

在Java虚拟机中,数字常量都存在常量池中,当做一次赋值运算时,会先去常量池中看看是否有这个量,如果有就赋值给变量,如果没有就先在常量池创建一个字面量然后再赋值给变量。

例如

String name = "Mark";

当Java第一次运行此语句时,此时常量池中并没有“Mark”这个量,当Java运行此语句时,会先从常量池中查找有没有这个量,发现没有就会在常量池中创建这个量,然后赋值给name这个变量。

运算符

Java语言中的运算符可以分为5类,即赋值运算符,算术运算符、关系运算符、位运算符、逻辑运算符

赋值运算符(=)

算数运算符

算术运算符运算规则
+正号
+
+连接字符串
-负号
-
*
/除法
%取模
++自增
自减

关系运算符

Java语言中关系运算符有6个

> 、 < 、 >= 、 <= 、 != 、 ==

逻辑运算符

Java语言中逻辑运算符有5个

&& 、 || 、 !、 & 、|

注意!&& 和 || 具有短路机制

条件结构

if

public static void main(String[] args){
	int i = 2;
	if (i>1){
		System.out.println("i>1");
	}
}

if-else

public static void main(String[] args){
	int i = 2;
	if (i>1){
		System.out.println("i>1");
	}else{
		System.out.println("i<=1");
	}
}

if-else嵌套

public static void main(String[] args){
	int i = 3;
	if (i>1){
		if(i>2){
			System.out.println("i>2");
		}else{
			System.out.println("1<i<=2");
		}
	}else{
		System.out.println("i<=1");
	}
}

switch-case

使用语法
	switch (表达式){
            case 常量1: {
            	语句; 
                break;
            }
            case 常量2: {
         	   	语句; 
                break;
            }
            case 常量3: {
            	语句; 
                break;
            }
            default:
           	 	语句; 
                break;
        }
表达式可以使用的数据类型

JDK1.5前:switch/case中的表达式只能使用规定的基本数据类型,可以使用:

基本数据类型byte
基本数据类型short
基本数据类型int
字符型char
不能使用:基本数据类型float、double、long、boolean

JDK5之后,switch表达式类型新增加支持:枚举(enum)

JDK7之后,switch表达式类型新增加支持:String

break关键字的作用

代码的执行过程是遇到break才跳出,如果没有遇到break会继续往下运行,直到整个switch代码块结束。

循环

while语句

使用语法
while ( 循环条件 ) {               
		循环操作
	}

do-while语句

使用语法
do {  
		循环操作 
	} while ( 循环条件 );
与while的区别

do-while无论如何都会先执行一遍循环操作然后再进行判断,所以do-while与while的区别在于,do-while至少会执行一次,而while有可能一次也不会执行

for循环

使用语法
for(参数初始化表达式;条件判断;更新循环变量表达式 ){
		循环操作
	}

break和continue

break:改变程序控制流程,跳出循环
continue (只能用在循环里 ),跳出本次循环,进入下次循环

使用场合与作用

break可用于switch结构和循环结构中
continue只能用于循环结构中

数组

Java数组的定义

数组是一个变量,也是一组类型相同的数据的集合;
也就是说,数组中可以存储多个数据,但是这些数据的类型必须相同;
数组能够作为数据的容器使用,把多个数据集中存储;
存储在数组中的数据,都有相应的索引值(下标),可以方便获取或修改数组的数据;
当需要同时保存多个类型相同的变量并进行处理时,可以考虑用数组。

Java数组的声明

int a[];//声明了数组a

数组的静态初始化

int[] a={1,2,3};
int[] a2=new int[]{1,2,3};

数组的动态初始化

实例1:

//声明数组
int  []  a;
//动态初始化
a=new a[3];
//赋值
a[0]=1;
a[1]=2;
a[2]=3;

实例2:

//动态初始化
int  []  a = new a[3];
//赋值
a[0]=1;
a[1]=2;
a[2]=3;

数组的存储特点(堆栈)

基本数据类型的变量,变量存的是值本身。不会在堆里创建空间。
引用数据类型的变量,变量存的是引用的地址

数组排序(Arrays)

例子一:

public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		//定义数组存放学员的分数
		int scores [] = new int[3];
		for (int i = 1; i <4; i++) {
			System.out.println("请分别输入 第"+i+"位学员的分数");
			int score = s.nextInt();
			scores[i-1] = score;			
		}
		
		System.out.println("没有排序前学员的分数为:");
		for (int i : scores) {
			System.out.println(i);
		}
		
		System.out.println("排序后的学员的分数为:");
		//通过Arrays.sort方法进行排序,逐步学会查阅JDK中的帮助文档
		Arrays.sort(scores);
		for (int i : scores) {
			System.out.println(i);
		}
	}

例子二:

public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		//定义数组存放学员的分数
		int scores [] = new int[3];
		for (int i = 1; i <4; i++) {
			System.out.println("请分别输入 第"+i+"位学员的分数");
			int score = s.nextInt();
			scores[i-1] = score;			
		}
		
		System.out.println("学员的分数为:");
		for (int i : scores) {
			System.out.println(i);
		}
		
		System.out.println("按降序排序后的学员的分数为:");
		//通过Arrays.sort方法进行排序
		Arrays.sort(scores);
		for (int i=scores.length-1;i>=0;i--) {
			System.out.println(scores[i]);
		}

数组的优点和缺点

优点:
1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便

缺点:
1、数组的大小一经确定不能改变。 //集合
2、增加、删除元素效率慢

二维数组

二维数组: 简单理解为在数组中元素又是数组

声明与初始化

声明:
数据类型 [ ][ ] 数组名;
数据类型 数组名 [ ][ ] ;
数据类型 [ ] 数组名 [ ] ;

静态初始化

数据类型 [ ][ ] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…};

例如:

int [ ][ ]  arr={{12,17,66,26,18},{65,26,33,19,44},{14,54,32,88,99},};

示例:两个班级 ,每个班级3名学生,每个学生都有一个成绩,如果存两个班级所有的学生的成绩,如何做?

//静态初始化
int   [][] scores = {{5,6,7},{7,5,8}};
动态初始化

数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ] 数组名 = new 数据类型[m][n]
数据类型 [ ] 数组名 [ ] = new 数据类型[m][n]
例如:

int [ ][ ]  arr=new  int [6][3];
int arr2 [ ][ ] =new  int [6][3];
int [ ]  arr3 [ ] =new  int [6][3]; 

也可以理解为“6行3例”,或者理解为数组有六个元素,每个元素又是一个长度为3的数组。

示例:两个班级 ,每个班级3名学生,每个学生都有一个成绩,如果存两个班级所有的学生的成绩,如何做?

//声明数组并初始化
int [][] scores2 = new int[2][3];
//给数组的第一个元素(又是一个数组)赋值
scores2[0][0] = 5;
scores2[0][1] = 6;
scores2[0][2] = 7;
//给数组的第二个元素(又是一个数组)赋值
scores2[1][0] = 5;
scores2[1][1] = 6;
scores2[1][2] = 7;

示例

示例1

已知int [ ] [ ] arr={{12,17,66,26,18},{65,26,33,19,44},{14,54,32,88,99},};
求数组元素的和。

public static void main(String[] args) {
		int [ ][ ]  arr={{12,17,66,26,18},{65,26,33,19,44},{14,54,32,88,99},};
		int sum=0;
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++)//利用嵌套for循环来遍历二维数组
			{
				sum+=arr[i][j];//每遍历出一个元素则叠加一次
			}
		}
		System.out.println(sum);
	}
示例2

自定义学生人数及课程数,用二维数组存储各个学生多门课程的成绩。
说明:使用键盘录入学生人数及课程数,并录入每个的成绩,存储于二维数组,最后输出存储的二维数组中每一个学生的成绩。

public static void main(String[] args) {
		//创建键盘录入的对象
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入学生个数");
		//存储录入的数据
		int aa=sc.nextInt();
		System.out.println("请输入课程数");
		//存储录入的数据
		int ss=sc.nextInt();
		int[][] arr=new int[aa][ss];
		
        //录入学生成绩
		for(int i=0;i<aa;i++) {
			System.out.println("--现将录入第"+(i+1)+"个学生成绩--");
			for(int j=0;j<ss;j++){
				System.out.println("请输入该生第"+(j+1)+"门功课成绩:");				
				arr[i][j]=sc.nextInt();//将键盘录入的数据存到数组中
			}
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值