1 数据类型和运算符
2
3
4 标识符
5 常作用
6 常量、变量、方法、类和包等的名称
7 命名规则
8 必须以字母、_下划线、美元符$开头。
9 其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合
10 大小写敏感,长度无限制。
11 不可以是Java的关键字。
12 注意
13 Java不采用通常语言使用的ASCII字符集
14 Java采用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉字等等。(不建议大家使用汉字来定义标识符!
15 常量和变量
16 常量变量定义
17 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
18 变量举例:
19 在2D游戏程序中,需要代表人物的位置,则需要2个变量,一个是x坐标,一个是y坐标,在程序运行过程中,这两个变量的值会发生改变
20 常量举例
21 代表常数,便于程序的修改(例如:圆周率的值)
22 增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)
23
24 在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表
25 数据类型
26 整型
27 整型变量:
28 整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ‘(建议使用大写,小写容易误认为数字1)
29 浮点型
30 浮点类型常量:
31 浮点型变量:
32 float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
33 double类型:双精度类型 精度是float类型的两倍,尾数可以精确到16位有效数字,绝大部分应用程序都采用double类型。
34 注意
35 浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F
36 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
37
38 字符型
39 布尔型
40 boolean类型有两个值,true和false
41
42 boolean 类型用来判断逻辑条件,一般用于程序流程控制
43
44 实践:
45 请不要这样写:if ( is == true && done == false ) ,只有新手才那么写。对于任何程序员 if ( whether && !done ) 都不难理解吧。所以去掉所有的==fasle 和 ==true。
46
47
48 运算符
49 算术运算符
50 +:字符串相加,只要有一个操作数是字符串,自动变为字符串相连
51
52 关系运算符
53 关系运算符用来进行比较运算
54
55 关系运算的结果是布尔值:true/false
56
57
58 Scanner的用法
59 package scanner;
60
61 /**
62 * lang包是java的核心包,系统会自动加载lang包的内容
63 * 所以使用lang包中的内容不需要导入
64 *
65 * 除了lang包以外,其他的内容使用之前都必须要先导入
66 */
67 import java.util.Scanner;
68
69 public class ScannerDemo {
70 public static void main(String[] args) {
71 // 创建Scanner的变量
72 Scanner sc = new Scanner(System.in);
73 System.out.println("请输入第一个数字");
74 int n1 = sc.nextInt();
75 System.out.println("请输入第二个数字");
76 int n2 = sc.nextInt();
77 System.out.println("两个数字之和是:"+(n1+n2));
78
79 }
80 }
81
82
83 位运算符
84 位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。
85 如果操作的对象是char、byte、short,位移动作发生前其值会自动晋升为int,运算结果也为int。
86 package bit;
87 /**
88 * 位运算符
89 * @author tang
90 *
91 */
92 public class Test {
93 public static void main(String[] args) {
94 int a = 11;
95 int b = 8;
96 //按位与
97 /**
98 * 首先将表达式两边的数组转换为2进制
99 * 对应的位进行比较
100 * 如果对应的位上都是1 则结果的这一位为1
101 * 如果对应的位上有一个是0 则结果的这一位是0
102 * 1011
103 * 1010
104 * 1010
105 *
106 */
107 System.out.println(a & b);
108
109 /**
110 * 按位或
111 * 首先将表达式两边的数组转换为2进制
112 * 对应的位进行比较
113 * 如果对应的位上都是0 则结果的这一位为0
114 * 如果对应的位上有一个是1 则结果的这一位是1
115 * 1011
116 * 1000
117 * 1011
118 */
119 System.out.println(a | b);
120
121 /**
122 * 按位异或 ^
123 * 首先将表达式两边的数组转换为2进制
124 * 对应的位进行比较
125 * 对应的位上的值相等 则结果这一位为0
126 * 对应的位上的值不等,则结果这一位为1
127 * 1011
128 * 1000
129 * 0011
130 */
131 System.out.println(a ^ b);
132
133 /**
134 * 位移运算符
135 * a << n;
136 * 运算规则 箭头向左 二进制后面多加几个0
137 * 箭头向右 二进制后面少几位
138 * 10
139 */
140 a = 8;
141 System.out.println(a << 2);
142 System.out.println(a / 2);
143 }
144 }
145
146
147
148 条件运算符
149 语法格式
150 x ? y : z
151 唯一的三目运算符
152 执行过程
153 其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
154 经常用来代替简单的if-else判断
155
156 优先顺序: 赋值<三目<逻辑<关系<算术<单目
157
158 package bit;
159 /**
160 * 三目运算符
161 * @author tang
162 *
163 */
164 public class Test02 {
165 public static void main(String[] args) {
166 /**
167 * 三目运算符的语法
168 * 布尔值的表达式?值1:值2
169 * 如果布尔值表达式返回true 则三目运算符返回值1
170 * 如果布尔值表达式返回false 则三目运算符返回值2
171 */
172
173 int score = 69;
174 System.out.println(score >= 60?"及格":"不及格");
175 int b = 10;
176 System.out.println("abc"+(score + b));
177 }
178 }
179
180
181
182 命名规则(规范)
183 所有变量、方法、类名:见名知意
184
185 变量、方法名:
186 首字母小写和驼峰原则
187 run(), runRun(), age ageNew monthSalary
188 userName
189
190 常量:
191 大写字母和下划线:MAX_VALUE
192
193 类名:
194 首字母大写和驼峰原则: Man, GoodMan
195
196 //代码的第一行非注释的内容一定是 标记包名
197 package com.gzsxt.test;
198 //创建一个java文件的时候,系统会同时生成一个跟文件同名的 java的class
199 //文件的命名必须遵守以下规则:
200 //1,首字母大写,以后每个单词的首字母也大写
201 //2,命名要见名知意
202 //public 是一个访问修饰符 代表公共的公开的,意思就是修饰的内容在整个项目中都可以被调用
203 // class 是java的关键字 用来标记一个java的类
204
205 /*
206 * 多行注释
207 * 凡是在 /*和 * /之间的内容都是注释的内容
208 *
209 */
210
211 /**
212 * 文档注释
213 * @author tang
214 *
215 */
216 public class HelloWorld { //开始的大括号 可以独自占一行也可以跟在代码后面
217 //static 修饰符,表示静态的 所有静态的内容都是可以通过类名直接调用
218 // void 代表没有返回值,如果这里有返回值,则void会变成返回值的类型
219 // main 方法名
220 // main 方法是程序的入口,执行一个程序的系统会首先去寻找main方法,来执行main方法中的代码
221
222 public static void main(String[]args){
223 // 输出一句话在控制台
224 // 双引号来标记java中的字符串
225 System.out.println("我的第一是的发顺丰个java程序");
226 }//结束的大括号一定要独自占一行
227 }
228
229
230 final 常量
231 package day02;
232 /**
233 * 使用final来修饰一个变量,则该变量就变为常量
234 * 在常量的整个声明周期中只能被赋值一次
235 * 常量的命名规则 全部是大写字母 如果有多个单词 则通过下划线来链接多个单词
236 * @author tang
237 *
238 */
239 public class FinalDemo {
240 public static void main(String[] args) {
241 int age = 10;
242 System.out.println(age);
243 final int USER_AGE;
244 USER_AGE = 20;
245
246 String studentName;
247
248
249 }
250
251 public static void setUserName(){
252
253 }
254 }
255
256
257
258 package day02;
259 /**
260 * 变量的三要素
261 * 1,变量类型
262 * 2,变量名
263 * 3,作用域 从声明的位置开始 到 第一个结束的大括号
264 * @author tang
265 *
266 */
267 public class Test {
268 public static void main (String [] args){
269 //在java中所有用到的东西都必须要先声明 (有些是系统声明好的,就可以直接使用)
270 //声明变量的语法 数据类型 变量名 = 值
271 // 数据类型 变量名;
272 // 变量名 = 值;
273
274 int x;
275 x = 180;
276 int y = 200;
277
278 float w = 100.2f;
279
280 //不建议使用这种方式声明
281 int a , b ;
282
283 // byte 字节 类型 取值范围 -128 ~ 127
284 byte b1 = 100;
285 byte age = 127;
286
287 //short 短整型 占用两个字节 -2^15 ~ 2^15-1
288 short s = 30000;
289
290 //int 整型 占用4个字节 -2^31 ~2^31-1
291 int sal = 2100000000;
292
293 //long 长整型 占用8个字节 -2^63 ~ 2^63-1
294 //java 中所有的整数类型都默认是int类型 如果需要long类型则要在数字后面加一个l L
295 long money = 88888888888888L;
296
297 //在java中 整数类型默认使用int 如果长度不够,使用long类型
298
299
300 //带小数的类型 所有带小数的数字 默认都是double类型
301 //float类型 占用4个字节 小数点后面最多保留7位有效数字
302 float f = 3.1234567890F;
303 //double 类型 占用8个字节 小数点后面最多保留16位有效数字
304 double d = 1.123456789012;
305 System.out.println(d);
306
307
308 //在java中 双引号标记一个字符串
309 //单引号标记一个字符 char
310 //java使用的是unicode字符集 所以java中一个字符可以是一个汉字
311 char c = 'a';
312 char r = '\'';
313 System.out.println("abc"+r+"def");
314
315
316 //布尔值类型
317 //取值只能是true 或者false
318 //如果值为true 则在内存中保存的是1 如果是false 在内存中保存的是0
319 //布尔值只占用一个二进制的位 就是八分之一个字节
320 //多用于条件判断
321 boolean b2 = true;
322 System.out.println(59 > 60);
323
324
325
326 赋值运算符:
327 package flg;
328
329 public class Test {
330 public static void main(String[] args) {
331 int a = 10;
332 String str01 = "abc";
333 /**
334 * 1,当加号两边出现的都是数字类型,则作为数学运算
335 * 2,当加号两边出现了字符串类型 ,则作为连接符来使用,将加号两边的内容链接在一起形成一个新的字符串
336 */
337 // System.out.println(a+10+str01);
338 // System.out.println(str01+a+ 10);
339 // System.out.println(a/6);
340
341 //% 求模 求余数
342 //System.out.println(10%6);
343
344 // ++ 自增运算
345 //a ++; //等同于 a = a + 1; 等同于 a += 1;
346 // -- 自减运算
347 //a --; //等同于 a = a - 1;
348
349
350 //扩展运算符
351 // +=
352 // a += 10;//等同于 a = a + 10;
353 // a -= 10;//等同于 a = a - 10;
354 // a /= 10;//等同于 a = a / 10;
355 // a *= 10;//等同于 a = a * 10;
356 // a %= 10;//等同于 a = a % 10;
357
358
359 逻辑运算符 :
360 逻辑运算符与布尔操作数一起使用,组成逻辑表达式
361 逻辑表达式的结果是布尔值
362 &和&&的区别
363 “&”:无论任何情况,“&”两边的表达式都会参与计算。
364 “&&”: 当“&&”的左边为false,则将不会计算其右边的表达式。即左false则false
365 “|”和“||”的区别与“&”和“&&”的区别类似。
366
367 package flg;
368 /**
369 * 逻辑运算符
370 * 运算符两边出现的都是返回布尔值的表达式
371 * 运算结果也是布尔值表达式
372 * @author tang
373 *
374 */
375 public class Test02 {
376 public static void main(String[] args) {
377
378 //
379 /**
380 *短路与 &&
381 * 表达式两边的布尔值都返回true 则结果为true
382 * 如果表达式两边的布尔值有一个为false 则结果为false
383 * 如果第一个表达式就能确定返回结果 就不在去执行第二个表达式
384 *
385 * 逻辑与 &
386 * 表达式两边的布尔值都返回true 则结果为true
387 * 如果表达式两边的布尔值有一个为false 则结果为false
388 * 如果第一个表达式就能确定返回结果 仍然要去执行第二个表达式
389 */
390 int a = 10;
391 int b = 20;
392
393 boolean bl = a<1 && b>1/0;
394 System.out.println(bl);
395
396
397 /**
398 * 短路或 ||
399 * 当表达式两边的布尔值有一个返回true 则结果就为true
400 * 当表达式两边的布尔值都返回false 则结果为false
401 * 当第一个表达式就已经可以确定返回结果了 就不再执行第二个表达式
402 *
403 *
404 * 逻辑或 |
405 * 当表达式两边的布尔值有一个返回true 则结果就为true
406 * 当表达式两边的布尔值都返回false 则结果为false
407 * 当第一个表达式就已经可以确定返回结果了 仍然会继续执行第二个表达式
408 *
409 */
410
411 // System.out.println(a > 1 || b/0 > 100);
412
413
414 //逻辑非
415 //取反
416 //System.out.println(!(a>10));
417
418 //逻辑异或 ^
419 //表达式两边的布尔值相同 则返回false
420 //表达式两边的布尔值不相同 则返回true
421 System.out.println(false ^ true);
422
423 }
424
425 基本数据类型的类型转换
426 在赋值运算或算术运算时,要求数据类型相同,否则要进行类型转换
427
428 转换方式:
429 自动转换
430 强制转换
431
432 除boolean类型外,所有的基本数据类型因为各自的精度不同,赋值时都要考虑这个问题
433 除boolean类型外,所有的基本数据类型包括:整型,浮点型,字符型。
434 package 类型转换;
435 /**
436 * 基本数据类型的类型转换
437 * @author tang
438 *
439 * 类型转换分为两种情况
440 * 一,自动类型转换
441 * 1,低精度 向高精度转换
442 * 2,低位向高位转换
443 * 二,强制类型转换
444 * 1,高精度向低精度转换
445 * 可能会损失精度
446 * 2,高位向低位转换
447 * 可能会损失大小
448 *
449 */
450 public class Test {
451 public static void main(String[] args) {
452 int a = 10;
453 float f = 1.23f;
454 f = a;
455 long lo = 123L;
456
457
458 //__________________________
459
460 int b = 270;
461 byte bt = (byte)b;
462 System.out.println(bt);
463 //00000001 00001110
464
465
466 f = 3.14f;
467 int c = (int)f;
468 System.out.println(c);
469 }
470 }
471
472
473
474 package test;
475
476 import java.util.Scanner;
477
478 /**
479 * 练习3:商场推出幸运抽奖活动 根据抽奖规则计算会员卡号各位数字之和为16,则为幸运会员
480 * @author tang
481 *
482 */
483 public class Test03 {
484 public static void main(String[] args) {
485 Scanner input = new Scanner(System.in);
486 System.out.println("请输入四位数的会员卡卡号");
487 //接收到用户输入的卡号
488 int cardNo = input.nextInt();
489 //求出卡号千位上的数字
490 int k = cardNo/1000;
491 //求出卡号百位上的数字
492 int b = (cardNo%1000)/100;
493 //求出卡号十位上的数字
494 int s = (cardNo%100)/10;
495 //求出卡号个位上的数字
496 int g = cardNo%10;
497 // 求和
498 int sum = k + b + s + g;
499 String message = (sum == 16)?"恭喜你,中奖了!":"很遗憾,本次没有中奖";
500 System.out.println(message);
501