赞
踩
此文记录自己学习Java基本语法过程中的笔记,用于自己复习。因初次学习,难免有不恰当的地方,仅供各位读者参考。
硬件
输入设备
接受外部的数据,指令
键盘、鼠标、摄像头、扫描仪,麦克风
输出设备
显示、输出内部的数据
显示器、音箱、打印机
存储设备
内存
特点:瞬时存储、易失性、存取速度快
外存
硬盘、U盘、等
特点:永久存储、存储速度慢
存储单位:bit位 b
字节byte B 1B=8b
KB 1KB=1024B
MB 1M=1024KB
GB 1G=1024M
TB
处理器CPU
控制器:分析指令,分配协调其它组件工作
运算器:运算
这些组件是协调进行工作。输入设备–控制器–运算器+存储器–>输出设备
软件
系统软件:Windows,Mac,Linux,Android
图行化的操作系统
DOS:Win+R–》cmd启动
目录切换:cd (change dir)
cd 目录路径名
相对路径:从当前路径开始
绝对路径:从某个盘符的跟路径开始
回到上一级 cd …
跨盘符:盘符名:
注意事项:可以使用Tab进行提示补全
如果路径中含有空格等特殊字符建议路径名加引号
不区分大小写
借助方向上下键使用历史指令
应用软件
QQ、微信
生活中的程序:为了解决某个问题,进行一系列的有序动作
计算机中的程序:为了让计算机帮我们解决某个问题,而编写的一系列有序指令集
机器语言:01010111100000
特点:可读性不高,维护性;执行效率高
汇编语言:借助一些助记符来编写程序,add 1,1 result
特点:可读性有改善;代码很冗长,要求对计算机的硬件组成非常了解。运行速度也比较快
高级语言:a=1 b=2 c=a+b
C语言是鼻祖,C++,C#,Python,Java等
编译型语言:源代码—经过编译器的编译—可执行文件 翻译家:整体翻译-----Java
解释型语言:源代码—经过解释器的解释—从上到下逐行解释执行 同声传译
编译型高级语言、面向对象、跨平台(跨操作系统)、分布式
jvm: java virtual machine java虚拟机
1996年1月,Sun公司发布了Java的第一个开发工具包*(JDK 1.0)*
1998年12月8日,第二代Java平台的企业版J2EE发布。
J2ME(Java2 Micro Edition,Java2平台的微型版):移动端,现在被Android替代
J2SE(Java 2 Standard Edition,Java 2平台的标准版):提供核心功能
J2EE(Java 2Enterprise Edition,Java 2平台的企业版)
2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。
2009年,甲骨文公司宣布收购Sun
2014年,甲骨文公司发布了Java8正式版
JDK
java development kit java程序开发包,供开发用
jre
java runtime environment java运行时环境 ,供java程序
未配置环境变量,会提示
C:\Users\yy>javac -version
‘javac’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
配置环境变量:就是为了在任何目录下都能使用bin目录下的指令
搜索:编辑环境变量配置,在系统变量中
新增:JAVA_HOME:C:\Program Files\Java\jdk1.8.0_333
添加Path: %JAVA_HOME%\bin
CLASSPATH:可以暂不配
1)写源程序(后缀名java)
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!!!");
System.out.println("Hello World!!!");
}
}
2)编译(后缀名是class)
javac 文件名.java
编译成了文件名.class
3)运行
java 文件名
注意点:
1、文件名要与public修饰的class 名一致
2、要用英文命名,每个单词首字母大写,驼峰法,见名知意
3、乱码是编码格式导致的
4、main方法是java程序的入口,有四要素public,static,void,String[]
5、java中开始的大括号一般在行末,结束的大括号跟这个层级对齐
6、每个指令以分号结束
在控制台输出一定的内容,然后换行
System.out.println("hello world");
在控制台输出一定的内容,不换行
System.out.print("hello world");
输出一个空行
System.out.println();
练习
太棒了!
马上就端午了!
回家!
转义字符
转义字符 | 描述 | 举例 |
---|---|---|
\" | " | System.out.println(“\”"); |
\\ | \ | System.out.println(“\\”); |
\t | 一个Tab键的距离 | System.out.println(“你好\t张三”); |
\n | 换行 | System.out.println(“你好\n张三”); |
练习:打印购物清单
作用:解释代码,是给程序员看的,方便维护
编译器不处理注释,所以不影响程序的执行效率
提倡代码注释多多益善
分类:
1、单行注释。//
2、多行注释。/* */
3、文档注释。/** */
我有10块钱,吃早饭花6元,还剩多钱?
1、开空间,存储数据
2、CPU运算,更新空间的值
变量:内存中的一块空间
这块空间中存储的值是可以发生的变化的
变量值:空间存储的数据;
变量类型:存储数据的类型,来决定分配多大的空间
变量名:存储空间的别名,快速地找到取出其中的数据
基本数据类型:
数值:整数
int 4个字节 32位 [-231-231-1]===[-2,147,483,648,2,147,483,647]
byte 1个字节
short 2个字节
long 8个字节
小数/浮点数
float 4个字节
double 8个字节
字符型
char 存储单个字符 使用单引号引起来 如 ‘男’ ‘1’ 2个字节
‘0’----48 ‘A’----65 ‘a’-----97
布尔型
boolean 真true 假 false
引用数据类型:
字符串
String 存储0-N个字符 使用双引号引起来 如“helloworld”
怎么确定数据类型:
手机号码?字符串;
身份证号号码?字符串;
订单号?字符串
银行存款¥1,234,456元?double
不需要计算,可以存储为字符串。
命名规范:
1)只能使用$,字母,数字,_,不能以数字开头
2)不能使用关键字。public class static void String
3) 要见名知意 age name score
4)使用驼峰法(Camel命名法),第一个单词首字母小写,其后每个单词首字母大写:stuJavaScore
5)区分大小写 age Age是两个不同的变量
1、申请空间(声明):数据类型 变量名;
int money;
double score;
2、存储数据(赋值)
money = 10;
可以合成一步:数据类型 变量名=值;
String name=“王明”;
boolean flag=true;
3、使用变量
System.out.println(name);
注意:变量必须先声明,后赋值,再使用。
练习:
输出MP3的数据:
品牌:漫步者
价格:299.9
颜色:白
库存:100
是否首发:false
输出某个学生的信息
姓名:王丽
性别:女
身高:165.8
年龄:18
常住地是否是西安?true
常量:内存中的一块空间,空间中存储的数据不能改变
语法:final 数据类型 变量名=值;
命名规则:全部用大写,单词之间用_做分隔,如USER_ROLE_VIP
字面常量:1,234,‘a’,“abc”,false
默认的数据类型:整数默认的数据类型是int,如果给long类型赋值,需要添加l/L,建议大写L;
小数默认的数据类型是double,如果给float类型赋值,需要添加f/F;
使用场景:1、固定不变的量建议使用常量,PI,WEEK_DAY
2、特殊的含义,STATE_ON,STATE_OFF
语法:变量名=表达式;
运算规则:从右往左
int a=12;
int b=a;
int c=a+1;
从键盘输入数据
//导包
import java.util.Scanner;
//初始化scanner
Scanner scanner=new Scanner(System.in);
//接收一个整数
int a=scanner.nextInt();
//接收一个double类型的数据
scanner.nextDouble();
//接收一个字符串
String str=scanner.next();
+ - * / %
//整除,整数/整数,结果一定是整数
int a=3/2 //结果是1
//求余 %
int b=13%2;
拆分一个三位数
int num2=986; // 98 6/// 9 86
int bai2=num2/100;
int ge2=num2%10;
//int shi2=num2/10%10;
int shi2=num2%100/10;
System.out.println(num2+"的百位数字是:"+bai2);
System.out.println(num2+"的十位数字是:"+shi2);
System.out.println(num2+"的个位数字是:"+ge2);
单目运算符:自增自减运算符++,–
++
int a=1;
a++; //a=a+1
++在后,先用再+
++在前,先+再用
int a=1; //a=a+2; a+=2; System.out.println(a); System.out.println("-------"); int b=12; //b++; //++b; //b=b+1; //b--; --b; System.out.println(b); System.out.println("-------"); int c=5; // ++在后,先用再+ //--在后,先用再- //System.out.println(c++); int d=c++; System.out.println(c); System.out.println(d); System.out.println("-------"); //++在前,先+再用 //--在前,先-再用 int x=15; //System.out.println(++x); int y=++x; System.out.println(x); System.out.println(y);
> < >= <= == !=
关系表达式的结果是boolean
== 等于
注意:关系表达式不要连写 1<a<6
int num1=23;
int num2=23;
boolean flag=num1<num2;
System.out.println(flag);
double类型在底层是不精确存储,不建议进行==比较
double d1=1.0;
double d2=1.0000000000000000000123;
System.out.println(d1==d2);
字符串之间的等值比较不能用==,而要用.equals()
String str1="abc";
String str2="abc";
System.out.println(str1==str2);
Scanner sc=new Scanner(System.in);
String str3=sc.next();
System.out.println(str1==str3); //比较字符串的地址是否一致
boolean f=str1.equals(str3); //比较字符串的值是否一致
System.out.println(f);
char类型在底层是数值存储,也可以进行大小比较
char c='a';
char d='b';
System.out.println(c==97);
System.out.println(c<d);
练习
从键盘上输入一个数,输出是否是偶数?
链接多个条件/关系表达式
&& 逻辑与 两个条件同时成立,整个表达式才成立 :同真则真,有假则假
|| 逻辑或 两个条件只要有一个成立,则整个表达式成立 :有真则真,同假则假
支持短路,即第一个表达式的结果就可判断整个表达式的结果,则第二个表达式就无需判断
!取反
int num1=15;
int num2 =1;
boolean f=(num1<10)&&(num2>2);
System.out.println(f);
boolean f2=(num1<10)||(num2>2);
System.out.println(f2);
//&& || 支持短路
boolean f3=(num1<10)||(num2++<3);
System.out.println(f3);
System.out.println(num2);
//取反
boolean f4=!f3;
System.out.println(f4);
练习
输入一个数,判断是否是个四位整数
<< 左移:相当于乘法,乘以2的N次方
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVwyfHrh-1654775053762)(D:\AF2205\typora_img\image-20220602121405988.png)]
int a=5;
int b=5<<1;
System.out.println(b); //结果是10
>>右移:相当于整除,除以2的N次方
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6yVHmBl7-1654775053768)(D:\AF2205\typora_img\image-20220602121815120.png)]
int c=5>>1;
System.out.println(c);
& 按位与 :同1则1,遇0则0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJrbuFDJ-1654775053769)(D:\AF2205\typora_img\image-20220602121608471.png)]
int m = 5;
int n=13;
System.out.println(m&n);
逻辑运算 (3>7)&(2<8) 不支持短路
int m = 5;
int n=13;
System.out.println((m>6)&(n++>4));
System.out.println(n); //n=14
判断奇偶数:
int x=20;
boolean f=(x&1)==0;
System.out.println("是偶数吗?"+f);
|按位或:有1则1,同0则0[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9hv7sCJ-1654775053770)(D:\AF2205\typora_img\image-20220602122037618.png)]
int num1=5;
int num2=13;
System.out.println(num1|num2); //13
逻辑运算,不支持短路(略)
取一个数最近的偶数:或1,最低位置1,然后-1,最低位就变成了0
int num3=25;
int num4=(num3|1)-1;
System.out.println((num4&1)==0);
^ 按位异或 :不同为1,相同为0
对同一个数字异或两次,可以获取原数字
可用于加密和解密
int num5=5;
int num6=13;
System.out.println(num5^num6); //8
System.out.println(num5^num6^num6); //5
先运算,再比较,然后连接,最后赋值
小括号的优先级最高,建议添加小括号增强代码的可读性。
(2*(1+1)+23)*2
int a=5;int b=8;实现a,b两个数的交换
方法一:申请临时变量
temp=a;
a=b;
b=temp;
方式二:加减法
a=a+b;
b=a-b;
a=a-b;
方式三:异或法
a=a^b;
b=a^b;
a=a^b;
从上往下依次执行
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的用户名:");
String name=sc.next();
使用场景:需要先判断条件,再决定如何执行。
简单if:
语法:
if(条件表达式){
执行语句;
}
条件表达式:结果是boolean,可以是变量,关系表达式,逻辑表达式等
执行流程:先判断条件表达式的值,如果为true,执行语句;否则继续执行结构后的其它语句
使用场景:只有一个分支
案例:
int a=24;
int b=52;
//如果a>b;输出a>b,否则什么都不输出
if(a>b){
System.out.println("a>b");
}
练习:有两个数,输出较大的那个数
System.out.println("----------输出两个数中较大的那个-----"); int m=120; int n=25; if(m>=n){ System.out.println("较大的数是"+m); } if(m<n){ System.out.println("较大的数是"+n); } /* int max=m; if(max<n){ max=n; } System.out.println("较大的数是"+max); */
if…else:
语法:
if(条件表达式){
执行语句1;
}else{
执行语句2;
}
执行流程:先判断条件表达式的值,如果为true,执行语句1;否则就执行语句2。
使用场景:两路分支。
案例:
System.out.println("----------输出两个数中较大的那个-----");
int m=120;
int n=25;
if(m>=n){
System.out.println("较大的数是"+m);
}else{
System.out.println("较大的数是"+n);
}
练习1:键盘中输入密码(正确的密码是123),输出密码正确或密码错误。
练习2: 从键盘上输入一个数,判断奇偶性。
多重if结构
语法:
if(条件1){
语句1;
}else if(条件2){
语句2;
}else if(条件3){
语句3
}…
else{
语句4;
}
执行流程:先判断条件1,如果为true,则执行语句1;
否则就判断条件2,如果为true,则执行语句2;
否则就判断条件3,如果为true,则执行语句3;
否则就执行语句4.
使用场景:一个维度连续区间的多路分支。
案例:
//猜数 //> < = int num=18; Scanner sc=new Scanner(System.in); int n=sc.nextInt(); if(n>num){ //> System.out.println("猜大了"); }else if(n<num){ System.out.println("猜小了"); }else{ //== System.out.println("猜对了"); } //根据成绩评等级 //0-60 差 60-80中 80-90良 90-100 优 int score=58; if(score<60){ System.out.println("差"); }else if(score<80){ System.out.println("中"); }else if(score<90){ System.out.println("良"); }else{ System.out.println("优"); }
练习:根据积分输出可以享受的折扣。[0-2000] 9折 (2000,4000]8折,(4000,6000]7折,(6000,)5折
嵌套if结构
语法:
if(条件1){
if(条件2){
语句1;
}else{
语句2;
}
}else{
语句3;
}
执行流程:先判断条件1,如果条件1不成立,则执行else;
如果成立,就判断条件2是否成立,如果成立,语句1;否则就执行语句2。
使用场景:多个维度的多路分支。
案例:
// 100比赛,时间少于10s就可以进入决赛,否则淘汰
//如果性别是男,就进入男子决赛;否则就进入女子决赛
int time=12;
char sex='女';
if(time<10){
if(sex=='男'){
System.out.println("恭喜进入男子决赛");
}else{
System.out.println("恭喜进入女子决赛");
}
}else{
System.out.println("谢谢参与");
}
练习:超市活动,会员消费满200元打7折,不满打9折;非会员消费满300打8折,否则不打折。
键盘输入是否是会员,及消费金额来判断享受折扣。
三目运算符:变量 a = 表达式?值1:值2;
//输出两个数中较大的数
int a=120;
int b=25;
int result=a>b?a:b;
String result=a>b?"a大":"b大";
if(a>b) {
result=a;
}else {
result=b;
}
System.out.println("结果是"+result);
第一名----冠军T恤 第二名 -----书包 第三名-----气球 其它-----什么都不奖励
语法:
switch(表达式) {
case 常量1:
break;
case 常量2:
break;
case 常量3:
break;
default:
break;
}
执行流程:先计算表达式的值,再与case后面的常量进行比较,如果相等,则执行冒号后面到break之
间的代码。
如果和任何一个case都不匹配,则执行default的代码
使用场景:等值的多分支结构
备注:
1、表达式 结果的类型只能:byte,short,char,int,String(jdk1.7+),枚举
2、case 常量
常量的数据类型要与表达式的数据类型一致
常量不能重复
常量没有先后顺序
3、break 中断指令,跳出switch结构
4、default 表达式和所有的case都匹配不上,就执行其后的语句。和case语句没有先后顺序
int mingCi=1;
switch(mingCi) {
case 1:
System.out.println("冠军T恤 ");
break;
case 2:
System.out.println("书包 ");
break;
case 3:
System.out.println("气球 ");
break;
default:
System.out.println("什么都不奖励");
break;
}
练习1:
===欢迎登陆学习平台=
1)登录
2)注册
3)退出
=========================
请选择:1
登录
练习2:翻译对应的英文缩写。CN—中国,UK—英国 USA—美国,其它----我也不认识
case穿透:case后面的break省略,则不会和下一个case匹配,直接执行其后的代码,直到碰到
break,这叫做case穿透。有时候我们可以利用case穿透简化代码的编写。
//晚自习 周一,周三,A老师辅导 周二,周四,B老师辅导,周五,考试,周六周日休息 String today="周二"; switch(today) { case "周一": case "周三": System.out.println("欧老师辅导"); break; case "周二": case "周四": System.out.println("张老师辅导"); break; case "周五": System.out.println("考试"); break; case "周六": case "周日": System.out.println("休息"); break; }
练习:1、一三五做面 ,二四六做米饭,周日吃大餐。
2、根据月份输出该月对应的天数。
//输出成绩的优良中差 Scanner sc=new Scanner(System.in); System.out.println("请输入你的成绩:[0,100]"); int a=sc.nextInt(); if(a<0||a>10) { System.out.println("输入有误"); }else { switch(a/10) { case 0: case 1: case 2: case 3: case 4: case 5: System.out.println("差"); break; case 6: case 7: System.out.println("中"); break; case 8: System.out.println("良"); break; case 9: case 10: System.out.println("优"); break; default: System.out.println("输入有误"); break; } }
场景:重复做的事情
循环的特点:
循环操作:重复的事情,可以一样的,也可以是有规律的
循环条件:循环继续的条件,循环结束的条件
语法:
while(循环条件){
循环操作;
}
执行流程:先判断循环条件,条件如果成立,就执行循环操作;循环操作执行完成,继续判断条件;
条件如果成立,就执行循环操作;。。。直到条件不成立,循环结束。
特点:先判断,再执行
如果条件不成立,循环操作可能一次都不执行
案例:
//输出**********
//循环操作:输出* sout(*)
//循环条件: 循环变量i i=[1-10] 循环变量需要更新
int i=1;//循环变量的初始化
while(i<=10) {
System.out.print("*");
i++;
}
练习:输出10遍 好好学习,天天向上
while循环适用在循环操作可能一次都不执行的场景
/** * 1登录 2 注册 3退出 * 如果输入的不是1,2,3,提示用户重新输入,直到输入正确为止。 * * 循环操作:sout("请重新输入") 接收键盘输入 * 循环条件:输入的不是1,2,3 * * */ System.out.println("1登录 2 注册 3退出"); System.out.println("请选择"); Scanner input=new Scanner(System.in); int num=input.nextInt(); // while(num!=1&&num!=2&&num!=3) { System.out.println("输入错误,请重新输入"); num=input.nextInt(); } switch(num) { case 1: System.out.println("登录"); break; case 2: System.out.println("注册"); break; case 3: System.out.println("推出"); break; }
使用while,注意判断条件。另可以使用boolean类型作条件判断
/** * * 1登录 2 注册 3退出 * * 菜单自动循环 :除非输入3,程序结束 * */ Scanner input=new Scanner(System.in); int num=1; boolean flag=true;//true要循环 false退出 // while(num!=3) { while(flag) { System.out.println("1登录 2 注册 3退出"); System.out.println("请选择"); num=input.nextInt(); switch(num) { case 1: System.out.println("登录"); break; case 2: System.out.println("注册"); break; case 3: flag=false; System.out.println("退出"); break; } System.out.println(); }
循环操作中可以借助循环变量
//输出1-100之间的偶数
int i=2;
while(i<=100) {
System.out.println(i);
i+=2;
}
//输出100-1
int j=100;
while(j>0){
System.out.println(i);
j--;
}
练习:1、求1-100之间的整数和
2、求1-10之间的乘积
3、求1-2+3-4+5-6+…-100
语法:
do{
循环操作;
}while(条件);
执行:先执行一遍循环操作,然后判断条件,条件成立,就继续执行操作;
循环操作执行结束,继续判断条件;。。。。。直到循环条件不成立,循环结束。
特点:先执行,后判断
循环操作至少会执行一次
Scanner input=new Scanner(System.in); String answer; do { System.out.println("1登录 2注册 "); System.out.println("请选择"); int num=input.nextInt(); switch(num) { case 1: System.out.println("登录"); break; case 2: System.out.println("注册"); break; } System.out.println(); System.out.println("继续吗"); answer=input.next(); }while("y".equals(answer));
练习:
老师讲,我学习
老师问:会了吗?
学生回答:y,结束;n 继续
练习2:1-20之间整数相加,求加到几和开始超过50?
语法:for(1、循环变量的初始化;2、循环条件;4、循环变量的更新){
3、循环操作
}
特点:循环次数固定
//输出1-100的整数 for(int i=1;i<=100;i+=2) { System.out.println(i); } //输入5个学生的成绩,求平均成绩 Scanner sc=new Scanner(System.in); int sum=0; int count=0;//计数器 for(int i=1;i<=5;i++) { System.out.println("请输入第"+i+"个学生的成绩:"); int score=sc.nextInt(); sum+=score; if(score<90) { continue; } count++; } double avg=sum/5.0; System.out.println("平均成绩:"+avg); System.out.println("90分以上的人数为:"+count); System.out.println("90分以上的人数比例为:"+count/5.0*100+"%");
练习:1、输出1-100之间7的倍数
2、输入5个学生的年龄,输出20岁以上的人数
1)循环次数固定,优先for
2)循环操作有可能一次都不执行,选用while
3) 其它,while和do…while都可以
break 中断指令,结束所在层的循环
//跑10圈
//跑到第7圈,退出
for(int i=1;i<=10;i++) {
if(i==7) {
System.out.println("实在跑不动了,退出");
break;
}
System.out.println("跑第"+i+"圈");
}
常见编码风格:
while(true){
if(条件) {
break;
}
}
continue:中断指令 中断本轮的循环,继续执行下一轮的循环
//跑10圈
//跑到第7圈,跑不动了,休息一圈,接着跑
for(int i=1;i<=10;i++) {
if(i==7) {
continue;
}
System.out.println("跑第"+i+"圈");
}
注意事项:
1)可以使用在任一种循环结构中。
2)一般都会和条件结构结合使用。
3)避免出现不可到达的代码。
练习:模拟QQ登陆,最多3次机会
账号:270828163
密码:te123
输入错误,您还有2次机会
账号:270828163
密码:te123
输入错误,您还有1次机会
账号:270828163
密码:te123
输入错误
3次机会全用完,请稍后再试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。