标签:个数 功能 ada 变量 break || double 改变 图片
? 在计算机中,程序运行需要对数据进行处理,而程序中的数据在运行时会存储在内存中,编程中需要频繁操作内存中的数据,为了方便操作,程序中需要通过变量名作为标识符来操作内存中相关的数据。
? 变量就是在内存中所分配给数据的一块空间。同时内存会为该空间指定一个内存地址。
? 程序中可以通过变量名操作内存中的数据。
定义变量
基本格式:数据类型 变量名 = 数据;
代码演示:
public static void main(String[] args) {
/* 基本格式:数据类型 变量名 = 数据 */;
int age = 10;
/* 其他格式: 先定义,后赋值 */
int num1;
num1 = 10;
/* 其他格式:批量定义赋值 */
int a = 10,b = 20,c = 30;
}
使用变量
使用方式:在程序中,直接调用变量名即可。
代码演示:
public static void main(String[] args) {
/* 定义变量 */;
int age = 10;
/* 调用变量 */
System.out.println(age); // 输出结果:10
}
注意事项:
在java方法中,若定义变量且没有赋值时,在调用变量时,编译无法通过。
代码演示:
public static void main(String[] args) {
/* 在方法中,定义变量,但没有赋值*/
int age;
System.out.println(age); // 结果:编译不通过
}
不同种类的数据可以表示不同的事物
? 计算机中存储的所有内容(文本文件、音乐文件、电影文件等等),都可称为数据。
? 数据主要用来模拟现实事物。比如,如何描述商品的价格、人的身高呢?那就可以用数字类型的数据表示。如何描述一段文字呢(如:床前明月光)?此时就无法用数字类型的数据表示了,那就得用字符串表示。
? 所以,根据模拟的现实事物不同,需要用不同类型的数据表示。
? 另外需要注意的是,无论操作什么类型的数据,在计算机中最终都是以二进制存储的。
数据类型的划分
在Java中,数据分为两大类:
本篇先学习基本数据类型,后续再学习引用类型的数据。
八种基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int | 4个字节 | -2的31次方~2的31次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点型 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点型 | double | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔型 | boolean | 1个字节 | true, false |
自动转换(隐式)
特点:不需要特殊的代码处理,会自动转换。
规则:针对数字和字符,范围小的类型会自动转换为范围大的类型。
代码:
public static void main(String[] args) {
/* 字节类型 */
byte a = 10;
/* 整型 */
int b = a;
// 结果:字节类型10会自动转换为int类型
}
强制转换(显式)
特点:需要特殊代码处理
格式:(要转换的数据类型)数据
代码:
public static void main(String[] args) {
/* 大范围数据无法自动转换为小范围数据 */
// int a = 20;
// byte b = a;
// 结果:编译错误
/* 强制转换 */
int a = 20;
byte b = (byte)a;
// 结果:转换成功
}
注意事项:
事项:
代码:
public static void main(String[] args) {
/* 数据溢出 */
int a = 130;
byte b = (byte)a;
System.out.println(b);
// 运行结果:-126
// 原因:130超出了byte表示范围
/* 丢失精度 */
double pai = 3.14;
int c = (int)pai;
System.out.println(c);
// 运行结果:3
// 丢失了0.14
}
? 在程序中,需要频繁的运算数据,比如我们在网上购物时,需要计算总价格。
? 如何命令计算机计算数据呢?这时就需要运算符号表示运算。
算术运算符
运算符号:
+
-
*
/
%
代码:
public static void main(String[] args) {
int a = 10;
int b = 3;
/* 加法运算 */
System.out.println(a + b);
// 结果:13
/* 减法运算 */
System.out.println(a - b);
// 结果:7
/* 乘法运算 */
System.out.println(a * b);
// 结果:30
/* 除法运算 */
System.out.println(a / b);
// 结果:3
/* 取模运算-求余数 */
System.out.println(a % b);
// 结果:1
/* 注意:在java中,任何整数不能除以0, 在运行时会发生错误! */
System.out.println(200/0);
// 结果:Exception in thread "main" java.lang.ArithmeticException: / by zero
}
比较运算符
运算符:
>
<
==
>=
>
>
代码:
public static void main(String[] args) {
int a = 10;
int b = 12;
/* 大于 */
System.out.println(a > b);
// 结果:false
/* 小于 */
System.out.println(a < b);
// 结果:true
/* 等于 */
System.out.println(a == b);
// 结果:false
/* 大于等于 */
System.out.println(a >= b);
// 结果:false
/* 小于等于 */
System.out.println(a <= b);
// 结果:true
/* 不等于 */
System.out.println(a != b);
// 结果:true
}
注意:比较运算符的运算结果是布尔值(true或false)
逻辑运算符
运算符及运算规则:运算结果始终是布尔值
&&
左侧条件表达式 && 右侧条件表达式
||
左侧条件表达式 || 右侧条件表达式
!
!条件表达式
代码:
public static void main(String[] args) {
int age = 18;
char gender = '女';
/* 逻辑运算与- && */
System.out.println(age>=18 && gender=='男');
// 运行结果:false。原因:右侧表达式不满足
/* 逻辑运算或- || */
System.out.println(age>=18 || gender=='男');
// 运行结果:true。原因:左侧表达式满足
/* 逻辑运算非- ! */
System.out.println(!(age>=18));
// 运行结果:false
}
其他运算符
赋值运算符
运算符:=
意义:可以把右侧的数据赋值给指定的变量。
代码:
int age = 10;
复合赋值运算符
运算符:+=
、-=
、/=
、*=
、%=
意义:针对变量,是算术运算符和赋值运算符的组合使用。
代码:
int age = 10;
age+=3;
System.out.print(age);
// 运行结果:13。 age+=3 拆解 age = aeg + 3
小括号
运算符:(表达式)
意义:可以提高运算的优先级。
代码:
int result = (10 + 8) * 2
自增和自减
运算符:++
、 --
意义:针对变量自增1或自减1
++变量
或--变量
,先让变量自身加1或减1,再参与表达式运算。变量++
或变量--
,先让变量自身参与表达式运算,再自身加1或减1代码:
/* 前置自增 */
int a = 10;
System.out.print(++a); // 结果:11
System.out.print(a); // 结果:11
/* 后置自增 */
int b = 10;
System.out.print(b++); // 结果:10
System.out.print(b); // 结果:11
三元运算符
格式:条件表达式?表达式1:表达式2
意义:若条件表达式成立,则执行并返回表达式1的结果,反之返回表达式2的结果。
代码:
int a = 10>8?10:8;
System.out.print(a); // 结果:10
? 流程,指的是程序的执行顺序。程序默认的执行顺序是自上而下执行的。
? 但是,在程序中有些程序是选择执行的或是重复执行的,不同的选择会有不同的功能。比如我们玩游戏时王者荣耀时,我们在手机上选择不同英雄时,就是程序在执行不同的代码。
? 所以,若要控制程序执行的流程,就必须学习流程控制语句。
? 流程控制语句分为两大类:分支语句 和 循环语句
分支语句
if语句
格式:
if(条件表达式){
// 代码块
}
/*
若条件表达式成立(结果是true),则执行代码块中的程序。
*/
图解执行流程:
代码:
/* if语句 */
int age = 19;
if(age >=18 ){
System.out.println("欢迎进入");
}
// 执行结果:欢迎进入
if-else语句
格式:
if(条件表达式){
// 代码块
}else {
// 代码块
}
/*
若条件表达式成立(结果是true),则执行if代码块中的程序,反之执行else代码块中的程序。
*/
图解执行流程:
代码:
/* if语句 */
int age = 10;
if(age >=18 ){
System.out.println("欢迎进入");
}else {
System.out.println("对不起,年龄不合法");
}
// 执行结果:对不起,年龄不合法
if-else if...else语句
格式:
if(条件表达式){
// 代码块
}else if(条件表达式){
// 代码块
}
else if(条件表达式){
// 代码块
}
...
else {
// 代码块
}
/*
代码从上而下依次判断。
若其中有满足条件的,则进入对于的代码块执行,后续分支不再执行。
若都不满足,则执行else中的语句。
*/
图解执行流程:
代码:
/* if-else if -...-else 语句 */
int score = 80;
if(score>=90){
System.out.println("A");
}else if(score>=80){
System.out.println("B");
}else if(score>=70){
System.out.println("C");
}else if(score>=60){
System.out.println("D");
}else {
System.out.println("E");
}
// 执行结果:B
switch语句
格式:
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
// 首先计算出表达式的值
// 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
// 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
图解执行流程:
代码:
/* switch 语句*/
int num = 2;
switch (num){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("不合法");
break;
}
循环语句
for循环
格式:
for(初始化表达式1; 布尔表达式2; 步进表达式4){
// 循环体3
}
/*
执行顺序:1234>234>234...2不满足为止。
1负责完成循环变量初始化
2负责判断是否满足循环条件,不满足则跳出循环
3具体执行的语句
4循环后,循环条件所涉及变量的变化情况
*/
图解:
代码:
/* for循环 */
for (int i = 0; i <5 ; i++) {
System.out.println("hello" + i);
}
/*
执行结果:
hello0
hello1
hello2
hello3
hello4
*/
while循环
格式:
初始化表达式1
while(布尔表达式2){
循环体3
步进表达式4
}
/*
执行顺序:1234>234>234...2不满足为止。
1负责完成循环变量初始化。
2负责判断是否满足循环条件,不满足则跳出循环。
3具体执行的语句。
4循环后,循环变量的变化情况
*/
图解:
代码:
/* while循环 */
int count = 0;
while(count<5){
System.out.println(count);
count++;
}
/*
执行结果:
hello0
hello1
hello2
hello3
hello4
*/
do-while循环
格式:
初始化表达式1 do{
循环体3
步进表达式4
}while(布尔表达式2);
/*
执行顺序:134>234>234...2不满足为止。
1负责完成循环变量初始化。
2负责判断是否满足循环条件,不满足则跳出循环。
3具体执行的语句
4循环后,循环变量的变化情况
*/
图解:
代码:
/* do-while循环 */
int j = 0;
do {
System.out.println(j);
j++;
}while (j<5);
/*
执行结果:
hello0
hello1
hello2
hello3
hello4
*/
break和continue关键字
break:终止整个循环。
continue:结束循环中本次执行,并继续循环下次执行。
代码:
/* break 关键字 */
// 如:连续吃5个包子,吃到第3个,吃饱了,后面第包子就不吃了
for(int i = 1; i <=5; i++){
if(i==3){
System.out.println("吃饱了");
break;
}
System.out.println("吃第" + i + "个包子");
}
/* continue关键字 */
// 如:连续吃5个包子,吃到第3个时掉地上了,则第3个包子就不吃了,继续吃后面的包子
for (int i = 1; i <=5 ; i++) {
if(i==3){
System.out.println("第" + i+ "包子掉地上了");
continue;
}
System.out.println("吃第" + i + "个包子");
}
? 在程序中,有时需要一个变量来管理一组数据,此时用数组结构比较合适。
? 数组,就是在内存中开辟一组连续的长度固定的且有序的存储一组同类型的数据。
? 数组,是一种引用数据类型。
方式:
数据类型[]变量名 = new 数据类型[数组长度]
数据类型[]变量名 = new 数据类型[]{数据1,数据2...数据n}
数据类型[]变量名 = {数据1,数据2...数据n}
代码:
/* 方式1-定义一个长度为5的数组,默认每个位置的元素值是0 */
int[]nums = new int[5];
/* 方式2-定义一个长度为3,且指定位置的值 */
int[]nums2 = new int[]{100,200,300};
/* 方式3-方式2的简写 */
int[]nums3 = {100,200,300};
操作数组内部元素
读取数组内部元素:数组名[索引]
设置数组内部元素:数组名[索引]= 值
代码:
int[]nums3 = {100,200,300};
System.out.println(nums3[1]); // 执行结果:200
nums3[1] = 20;
System.out.println(nums3[1]); // 执行结果:20
遍历数组
数组的长度:数组名.length
遍历方式:循环
代码:
/* 遍历数组 */
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
数据创建时,内存分配的区别
基本数据类型:
引用数据类型:
图解:
数据传递时的区别
基本数据类型是值传递(数据在栈中会克隆一份新的,两个数据互不影响)。
引用数据类型是引用传递(数据的引用在栈中会克隆一份新的,但两个引用指向堆区中的同一个具体数据)
代码:
public static void main(String[] args) {
int a = 10;
int b = a;
b = 20;
System.out.println(a);
// 结果:10。改变b时,a不会受到影响。
int[]numbers1 = {100,200,300};
int[]numbers2 = numbers1;
numbers2[0] = 10;
System.out.println(numbers1[0]);
// 结果:10。改变numbers2时,numbers1受到影响。
}
图解:
图解1:基本数据类型传值
图解2: 引用数据类型传递引用
方法,在编程中也叫函数。
方法,可以将一段代码封装在一个代码块中,代表一个功能。
定义方法的两个关键
定义方式
权限修饰符 返回值类型 方法名(参数列表){
// 封装的程序
// return 返回对应类型的数据;
}
注意事项:
void
// 定义无参无返回值方法
public void fn1(){
System.out.print("你好”);
}
// 定义有参无返回值方法
public void fn2(int num1,int num2){
System.out.print(num1 + num2);
}
// 定义有参有返回值方法
public int fn3(int num1,int num2){
return num1 + num2;
}
调用方法
调用方式:方法名(实参列表)
注意事项:
如调用上述定义的方法:
fn1();
fn2(100,200);
int sum = fn3(100,300);
在Java程序中,可以定义的多个·重名
的参数列表不同
(参列表的个数或类型不同)的方法。这种现象叫做方法的重载。
代码如下:
public void fn(int num1,int num2){
System.out.print(num1 + num2);
}
// 定义有参有返回值方法
public int fn(int num1,int num2,int num3){
return num1 + num2;
}
注意事项:
标签:个数 功能 ada 变量 break || double 改变 图片
原文地址:https://www.cnblogs.com/lpl666/p/11979997.html