java的基础语法,以及变量的概念
Java基础语法1、变量1.1 问题1、变量的概念 2、变量的作用 3、变量的定义格式1.2 答案1.2.1 概念
变量就是内存中的存储空间,空间中记录着经常发生改变的数据 1.2.2 作用
用于在内存中保存数据;今后要操作的数据,如果是经常发生改变的, 就应该用变量进行维护 1.2.3 定义格式
数据类型 变量名 = 数据值; 数据类型:为空间中存储的数据,加入类型【限制】,可以限定整数、小数或者其他。 变量名:自己要为空间起的名字。 数据值:空间中要存储的数值。 1.3 变量的使用直接输出变量的值 格式:在输出语句的小括号直接写变量名就可以了。 修改变量的值 格式:变量名 = 数据值;
案例:
我们就以整数为例。来做一个代码实现。 public class Demo1Variable { public static void main(String[] args) { int salary = 12000;//定义一个整数类型的变量 System.out.println(salary);//取出变量里的值 salary = 15000; //修改变量里面的值 System.out.println(salary);//再次取出变量里的值 int age = 18;//定义第二个整数类型的变量 System.out.println(age);//取出变量里的值 } }1.4 变量的注意事项变量名不允许重复定义 一条语句可以定义多个变量 变量在使用前一定要进行赋值 定义float和long变量的注意事项 变量的作用域范围
案例1: public class Demo2Variable { public static void main(String[] args) { int num = 10; //int num = 20; 变量名不允许重复 int a = 10, b = 20, c = 30, d = 40;//一条语句可以定义多个变量,之间用逗号分割 System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); float f = 12.5F;//定义float类型需要在数值后面加上F/f long l = 13L;//定义long类型建议在数值后面加上L/l //int age; //System.out.println(age);//变量在使用之前一定要进行赋值,如果不赋值就报错。 } }
案例2: 关于变量作用范围及变量名冲突问题的案例 public static void main(String[] args){ int a = 10;//作用范围从定义位置开始 { int a = 10;//作用范围从定义位置开始 }//第二个a变量结束 //第二个a出现在第一个a的所属范围之内,重复变量名 System.out.println(a); }//第一个a变量结束 作用域 起作用的范围 列举: public static void main(String[] args){ { int a = 10;//作用范围从定义位置开始 }//第一个a变量结束 int a = 10;//在第一个a结束之后,消失了,再定义变量a,不冲突的 System.out.println(a); } public class Demo{ public static void main(String[] args){ { int a ;//作用范围从定义位置开始 } a = 10;//作用范围从定义位置开始 System.out.println(a); } }1.5 代码练习
需求:将(姓名,年龄,性别,身高,是否单身)定义为变量,随后打印在控制台 public class TestVariable { public static void main(String[] args) { String name = "张三";//姓名 --> String int age = 23;//年龄 --> int char gender = "男";//性别 --> char double height = 182.1;//身高 --> double boolean flag = false;//是否单身 --> boolean System.out.println(name); System.out.println(age); System.out.println(gender); System.out.println(height); System.out.println(flag); } }2、键盘录入2.1 问题1、什么是Scanner以及使用Scanner的目的 2、使用步骤2.2 答案2.2.1 Scanner介绍
Java已经写好了一个类,叫做Scanner,用于获取用户的输入的内容。因为是Java已经写好了,我们直接拿过来用就可以了。
目的:增加程序的灵活性,不需要再次编译,直接运行,在运行过程中输入数据 2.2.2 使用步骤
1、导包。导包的语句需要定义在类的上面。相当于告诉虚拟机Scanner类在哪里 import java.util.Scanner;
2、创建Scanner对象。相当于给虚拟机打个招呼,我要用这个类了。 Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
3、定义变量,接收数据。才是真正干活的代码 //增加友情提示 System.out.println("请输入数据"); //接收数据 //将sc.nextInt()获取的你在dos窗口输入的数据给变量a代表的空间 int a = sc.nextInt();//可以接收整数 String s = sc.next();//可以接收字符串
代码示例: //第一步:导包 import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { //第二步:创建对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:");//友情提示 //第三步:接收数据 int age = sc.nextInt(); System.out.println(age); System.out.println("请输入一个字符串:"); //第三步:接收数据 String name = sc.next(); System.out.println(name); } }3、标识符3.1 问题1、什么是标识符 2、标识符的命名规则 3、标识符的命名规范3.2 答案3.2.1 什么是标识符
标识符是用户编程时使用的名字,用于给类、方法、变量等命名。 3.2.2 标识符的命名规则
必须严格遵守 由26个大小写字母、数字0-9、下划线"_"、美元符号"$"组成 不能以数字开头 不能是关键字 大小写敏感(区分大小写)
示例: 正确的标识符: bj b2 _2b ak47 Class helloworld 错误的标识符: 2b class #itheima3.2.3 标识符的命名规范
建议遵守 小驼峰式命名: 适用于:变量名、方法名 规则一:标识符是一个单词的时候,首字母小写。 规则二:标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写 比如:name、firstName。大驼峰式命名: 适用于:类名 规则一:标识符是一个单词的时候,首字母大写 规则二:标识符由多个单词组成的时候,每个单词的首字母大写 比如:Student 、GoodStudent。
注:标识符的命名最好可以做到见名知意。例如:username、studentNumber等。
编码风格: 1 正确使用注释和注释风格 使用文档注释注释整个类或整个方法 如果是注释方法的某一个步骤应该使用单行注释或者多行注释 2 正确的缩进和空白 使用一次tab键进行缩进 运算符两边习惯各加一个空格 不如 int a = 1 + 2; 3 块的风格 Java源代码使用的行尾风格 public class HelloWorld{ public static void main(String[] args){ System.out.println("Java是世界上最好的语言!"); } } 还有次行风格 public class HelloWorld { public static void main(String[] args) { System.out.println("Java是世界上最好的语言!"); } } 使用的话都使用一种风格不要穿插使用4、类型转换-隐式转换
在Java中,不同的基本数据类型之间是不能直接参与运算的。在底层需要先进行类型转换,变成一样的类型,再进行运算。 4.1 问题1、类型转换的分类 2、什么是隐式转换 3、隐式转换的规则4.2 答案4.2.1 类型转换分类
类型转换分为两种: 隐式转换 强制转换 4.2.2 隐式转换
隐式转换也叫作自动转换,把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可 int a = 10; double num = a; // 将int类型变量a里面的值,直接赋值给double类型 System.out.println(num); // 输出10.04.2.3 隐式转换的规则取值范围小的数据,和取值范围大的数据进行运算,小的会先提升为大的之后,再进行运算 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。 boolean类型不能与其他基本数据类型相互转换。
注意: 所有的浮点数取值范围都比整数要大 因为float/double使用科学计数法来存储,而long使用普通的二进制来存储,也就是说一个存的是多少次方,而一个是只有多少位
练习1: //问变量c是什么数据类型? int a = 10; double b = 12.3; ??? c = a + b; //double的取值范围比int大,所以在计算的时候,变量a会自动提升为double。 //最终是两个double相加,结果就是double类型的。
练习2: byte a = 10; byte b = 20; byte c = a + b; // 第三行代码会报错,a和b会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。 // 修改为: int num = b1 + b2;
练习3: int a = 1; char b = "a"; int c = a + b; System.out.println(c); //最终输出结果:98 //b会自动转换为int类型,字符变成int类型会查询码表,变成97 //第三行代码97 + 1 最终结果为98.5、类型转换-强制转换5.1 问题1、什么是强制转换 2、强转转换的格式 3、强制转换的细节5.2 答案5.2.1 强制转换
自动类型提升的逆运算,把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量 5.2.2 格式
目标数据类型 变量名 = (目标数据类型)值或者变量; double num1 = 5.5; int num2 = (int) num1; // 将double类型的num1强制转换为int类型 System.out.println(num2); // 输出5(小数位直接舍弃)5.2.3 细节
强制类型转换有 可能 会损失精度 //损失精度: double num = 12.5; int num2 = (int)num; //将double类型的num强制转换为int类型,a = 12(小数位直接舍弃); int i = 128; byte b = (byte)i; //-128 //没有损失精度: int a = 12; byte b = (byte)a; //b=12;6、类型转换-案例1 注意点1: long num=12345L; System.out.println(num); //long 类型的数据不加L也可以输出 12345是int类型 赋值大类型发生了自动类型提升 long num2=123456789012345; System.out.println(num2); //已经超过了int的取值范围 报错 这个就必须加L //不加L是按照4个字节存的 加L是按照8个字节存的 float f=12;? float f=12.5;? 2 注意点2: 整数常量默认是int 小数常量默认是double byte b=12; byte b2=b+11; //编译失败 float f=b+12.5;//编译失败 3 注意点3 byte a = 3+4; 常量优化机制:3和4都是常量直接拿一个7出来 整数不是默认int类型?怎么能用byte进行存储呢? 看后面的常量值在不在byte的取值范围之内 在,可以按照byte的方式进行存储 不在,超出范围报错(进行强制类型转换)