Learing way
本文作者 Mr.赵
Email: lovelyalan@foxmail.com
QQ: 1069418097
声明: 本人并非任何机构或组织成员,
原创文章,转载标明作者及联系方式
初识Java
一.什么是Java
1.Java的产生
Java是Sun Microsystems于1995年推出的高级编程语言;
2.特性
- 易学性 2.强壮的 3.安全性 4.高性能 5.解释性 6.面向对象 7.跨平台的
支持windows,unix,苹果Mac系统
3.发展
①历史
②平台
-
Java SE 标准版
支持面向桌面级应用
-
Java ME 小型版
支持Java程序运行在移动终端
-
Java EE 企业版
针对企业的对于Web应用程序开发
二.环境准备
1.Jdk与Jre
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE
JRE是如果你想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
2.下载与安装
3.IDE(集成开发环境)
工欲善其事,必先利其器
我们也要有方便的工具来开发我们的程序
①工具
-
IDEA 一款强大的编译器
-
Eclipse 老牌编译器
这两款是主流的Java IDE 其它的不过多阐述
②下载
考虑到软件官网都是国外的,下载速度缓慢
联系作者或者发送Email获取,非广告非广告非广告
③用法
作为研究编程的我们,一定要有动手能力
视频教程:
下面教程中的链接是我为了方面给大家找好的,bilibili上面有很多学习视频,你也可以自己找,并非商业目的
觉得视频废话太多或者看不懂就联系我获取我录制的视频教程吧
三.HelloWorld
1.示例代码
public class HelloWorld {
public static void main(String[] args){
System.out.print("Hello world!");
}
}
尝试输出 你好 世界!
四.反编译
1.概念
编译概念: 使用 javac 将 源文件(.java) 编译为 字节码文件(.class)
反编译概念:将 **字节码文件(.class)**转换成 源文件(.java)的过程称为反编译
2.工具
Javadecompilers 一个免费快速的反编译网站
变量数据类型和运算符
一.变量
1.概念
“变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。
2.如何使用
先声明,再使用.
示例:
int age=18;
- int 是 数据类型,不可自定义,后面会详细介绍
- age是 变量名,可以自定义,但需遵循 命名规则(见后面)
- 18 是 变量值 ,可以自定义,但需对应 数据类型(见后面)
3.命名规则
-
以数字,字母,下划线和$符号组成,其中不能以数字开头
0a , 0b , 2hello这样以数字开头的变量名不可以
ab , x , $hello , _i 这样的变量符合要求
-
不能和Java中的关键字重名;
前面的Hello world代码示例中,大家看到了public或class这种单词了吗?
这些单词是让计算机理解你写的代码的命令,所以不能和它们重名哦~
-
尽量遵守见名知意和驼峰命名规则。
见名知意: 比如我要写一个 计算所有人年龄的平均数,那我应该给它起名 ageAvg (age是年龄的意思,Avg是average平均的意思)
驼峰命名: 相信大家注意到了,为什么上面的 ageAvg 我不用AGEAVG,AgeAvg等命名呢,驼峰命名的规则就是想让 名字像骆驼的背一样,这样更美观,一般来说首字母小写例如age的a,新的单词加入,首字母大写,例如:Avg的A用了大写
-
变量名不可以与已经声明的变量名重复,例如
int a = 0; int a = 1; //错误示范,请勿学习
如果这样写 程序就会报错,无法编译运行
请分清 声明 和 赋值的区别
int a = 0; a = 1;
a只声明了一次,赋值是无所谓的,所以可以编译运行
二.常量
1.概念
一个数据存储空间的表示,其值是不可以发生改变的,所以其实相对安全的
常量名通常大写,不同字符使用下划线分隔 如: AGE**_**AVG
只能被赋值一次,通常定义时即对其初始化
2.意义
为什么使用常量? 在实际开发和生活中有些值是一开始定义了在后面就不能修改的,如:圆周率
3.使用
数据类型前面加上 final
final int AGE=18;
三.数据类型
1.基本数据类型
基础补充:
位(bit)是计算机最小存储单位 它只能存0或1,感兴趣可以学一学 计算机科学
下图中我们只需要了解 位(b) - 太(T) 单位即可
-
数值型
- 整数(只能存整数):
- byte(1字节)
- short(2字节)
- int(4字节)
- long(8字节)
- 浮点数(可以整数或小数):
- float(4字节)
- double(8字节)
- 整数(只能存整数):
-
字符型
char(2字节) : 本质上是一个整数, 是字符的ASCII码值.
-
布尔型
boolean(1bit):boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储
什么时候使用布尔
当我们遇到 真 或者 假 是 或者 否
类似于这样两种情况的时候可以使用boolean类型的值
比如软件的关闭提示, 你是否真的退出软件呢?
2.引用数据类型
String(值越长,占的空间越大): 在java中 首字母的S必须大写,String可以存任何值,值需要用""两个引号圈起来
String name = "赵同学,_Helloworld,.!@#$%";
补充:
四.运算符
1.赋值运算符
赋值符号: =
将右边的值赋给左边的变量,示例可以看上面引用数据类型介绍
2.算术运算符
int age=18+3;
那么age的值就是21, /就是除法,%就是模mod运算(你暂时理解成求余数的运算)
关于模运算,你想深入研究的话我给你准备了两个资料 简书 百度百科
++,与–
基础补充:System.out.println(); 是打印输出其括号里的值到控制台
public static void main(String[] args) {
int i = 0;
System.out.println(i++);//1
System.out.println(i);//2
int j = 0;
System.out.println(++j);//3
}
1处会输出0 , 2处会输出 1 三处会输出 1
你发现规律了吗?
++就是+1, --自然是-1
如果++或–放在变量(上文中是i或j)后面,那么就会将下一次出现此变量时+1,就比如上文中的1处 i++出现的时候,它还是0,当它下一次出现的时候(2处),进行+1 就变成了 1
如果++或–放在变量(上文中是i或j)前面,那么它就会**立刻+**1 所以3处的j就立刻变成了 1
看不懂或者懵了别害怕,这里请上机练习一下,自己动手试一下,你就明白其中的奥妙啦!
3.关系运算符
基础补充: 关系运算符的值是 boolean(布尔)类型的, true代表真的 false代表假的
上文中提到过 两个引号 “” 包起来的数据 是 String类型的值,所以它输出了 true
这里请上机练习,实际操作一下!
4.逻辑运算符
思考时间:结合你所学的知识,你看懂了吗? 上机练习一下吧
5.三元运算符
又称三目运算符
boolean i = false;
1>2? i=true : i=false
请问布尔型变量 i 的值是什么?
结果肯定是 false,因为1小于2,程序会执行 冒号(:)后面的表达式,请根据语法图片仔细思考
如果 1>2 换成 1<2 呢?
五.数据类型转换
1.概念
上面讲到 int只能存整数,变量赋值(=)时必须对应数据类型, 那假如我想把int类型变量赋值给double呢? 那double赋值给int呢?数据类型之间的转换肯定是有规律的!
2.用法
-
自动类型转换
int a = 1; double b = a;
上面的代码 a 是int类型的,为什么可以直接赋值给 double呢?
其实变量自动转换了,小的值可以存到大的空间里面,如何理解这句话?
拿生活举例,你有一个200ml的小杯子和一个500ml的大杯子,200ml的小杯子装满了水,你想倒入500ml的大杯子里,显然没有任何问题.
如果反过来呢? 我500ml的杯子装满了水 可以倒入 200ml的小杯子里吗?显而易见,会溢出水\
结论:自动转换存在优先级,小的数据类型可以自动转换为大的数据类型,优先级如下
String>double>float>long>int>(short,byte,char)
-
强制类型转换
double a = 1.2; int b = (int)a;//1
数值型的数据可以互相转换,我们都知道double比Int大,所以就需要**在变量a前面加个(int)**告诉程序 我就是要转,非要转.
int a=(int)10.6; System.out.println(a); //10
结果为10,因为int只能存整数, java可没有什么四舍五入,强转会丢失数据精度,尤其在财务等方面慎用。
六.输入类
import java.util.Scanner;
//或者 import java.util.*;
public class test {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int i = input.nextInt();//1
System.out.println(i);//2
}
}
第5行的 input 是变量,可以自定义,符号上面讲的命名规范即可.
当程序运行到 1处 后,会暂停等待你输入一个值(只能输数字),输入后 会用值通过 "="赋值运算符赋值给变量 i , 然后 2处 将i的值 (你输入的) 打印出来
但是这个程序输入 字母或者符号就会 Boom 奔溃掉,为什么呢?
nextInt()大家观察一下,next后面的int, next后面的值决定了它可以输入什么类型的值例如 nextDouble() 你肯定也发现了 第二个字母首字母要大写哟~
我为你准备了更多资料 深入学习
选择结构
一.概念
1.使用场景
小惠: 嗨,我们晚上去吃火锅吧
小赵:我现在牙还在疼,如果到晚上的时候不疼了我们就一起去
二.语法
1.流程图
if (条件) { 代码 }
我们可以这么理解上面的使用场景
**if **(小赵的牙晚上不疼了) { 和小惠一起去吃火锅 }
如果**() 半圆括号**中的条件符合 就执行 { }花括号里的代码,否则什么也不会发生
if(小赵的java成绩>90分){
获得手表作为奖励
}
套用这个格式,把代码中的中文替换成 Java代码表达式即可
double score=90.0;
if(score>90){
System.out.println("很棒,奖励一个手表");
}
System.out.println("程序结束");
你认为程序会输出什么呢?
注意: score大于90吗?
思考时间:我只添加一个等于号(=),就可以输入奖励手表,你想多怎么做了吗?
三.进阶
1.复杂的逻辑表达式
仔细思考,看不懂多看几遍,别放弃,加油!
-
使用场景
小惠: 嗨,我们晚上去吃火锅吧
小赵:听说今天下暴雨,而且我现在牙还在疼,如果到晚上不下雨且我的牙不疼了我们就一起去 -
代码实现
if (晚上不下雨 && 小赵的牙晚上不疼了) { 和小惠一起去吃火锅 }
-
语法
代码与之前的有什么不同呢? 是不是多了一个 && 呀, 你还记得吗,我们在第二章变量数据类型与运算符-四.运算符-4.逻辑运算符 讲过它,翻回去看看吧~
这样的写法就将两个条件表达式代入判断, &&的作用就是 同时,它的名字是 与,只有当左边和右边**同时符合(同时为true)的时候,才执行花括号{}**里的代码
逻辑运算符肯定不止这一个,||或,这些就要看你自己探索啦~
2.if-else结构
-
使用场景
在上面案例讲 if的时候只讲过牙疼不能吃骨头,没讲牙不疼吃什么,这里我们来解决
-
流程图
-
语法
如果小赵Java考试成绩大于90分,就奖励他一个手表,否则就罚他抄写代码
if (小赵Java成绩> 90 ) { 奖励一个手表; }else { 惩罚抄写代码; }
程序只会执行其中一个,因为不可能存在成绩又大于90又小于90的情况
如果小赵考了88分,你能想到结果吗?
-
多重else-if
-
使用场景
如果小赵Java考试成绩大于90分,就奖励他一个手表,否则就看看及格大于60分了,如果及格了就什么鼓励他一下,否则就罚他抄写代码
-
流程图
-
语法
if ( 成绩>=80) { 奖励一个手表 } else if (成绩>=60) { 鼓励小赵好好学习 } else { 罚他抄写代码 }
这里你需要注意的是 程序只会执行其中一个, 如果成绩大于等于 80分 这个if-else结构就中断了,如果不符合第一个条件,就说明成绩没有大于等于80分,判断第二个条件,如果成绩及格了,就执行它的代码然后结束程序,否则执行最后一个条件,因为成绩又不大于80,又不大于60,只能说明不及格了
思考时间:
1.程序会输出什么呢?
2.if里面的条件顺序是否可以随意更换? (重点)
double score=77; if(score>=80){ System.out.println("良好"); }else if(score>=60){ System.out.println("中等"); }else{ System.out.println("差"); }
-
3.if嵌套
-
使用场景
小赵:今晚我们去看电影吧?
小惠:好啊小赵:那我们看 当幸福来敲门 吧?
小惠:好 -
流程图
这张图看不懂就不看了,不重要
-
语法
if(小惠看不看电影) { //如果看,就判断下一个条件 if(小惠看不看 当幸福来敲门) { 晚上和小惠一起去看 当幸福来敲门 } else { 晚上和小惠一起去看其他的电影 } } else { 改天再约 }
你想通了吗?
4.switch结构
-
使用场景
小赵参加计算机编程大赛
如果获得第一名,将参加麻省理工大学组织的1个月夏令营
如果获得第二名,将奖励惠普笔记本电脑一部
如果获得第三名,将奖励移动硬盘一个
否则,不给任何奖励 -
if结构实现办法
int mingCi=2; if(mingCi==1){ System.out.println("参加夏令营活动"); }else if(mingCi==2){ System.out.println("奖励笔记本一部"); }else if(mingCi==3){ System.out.println("奖励移动硬盘一个"); }else{ System.out.println("没有奖励"); }
是不是感觉非常繁琐与啰嗦呀
-
switch结构实现办法
int mingCi=2; switch(mingCi){ case 1: System.out.println("参加夏令营活动"); break; case 2: System.out.println("奖励笔记本一部"); break; case 3: System.out.println("奖励移动硬盘一个"); break; default: System.out.println("没有奖励"); break; } System.out.println("程序结束");
程序会获取 switch() 括号中的值,一个个向下比较,看看case后面跟的值是否与我的括号里的值相同,相同就执行符号要求的case.
这时候括号里填的就是数据,可不是条件表达式了哦~
switch有以下规定
- 常量名不可重复 : 就是比如 case 1有了,你不能再后面再写个重复的case 1
- 如果case后面没有break结束语,程序不会像if那样中断,会接着执行,这里复制示例代码到 IDE(写代码软件)里测试一下就明白了
- default,就是默认值,如果其他的case都不等于switch括号里的值就会执行它里面的代码,default可有可无,而且可以在任何位置
- switch后面的表达式类型只能是 int byte short char 枚举 String
-
switch和多重if的对比
相同点: 都是用来处理多分支条件的结构
不同点:
switch结构: 只能处理等值条件判断的情况
多重if选择结构: 没有switch选择结构的限制,适合更复杂的逻辑判断
四.总结
到目前为止我们学习过五种选择结构:
基本if选择结构: 处理单一或者组合条件的情况
if-else选择结构:处理简单的条件分支情况
多重if选择结构:处理复杂的条件分支情况
嵌套if选择结构:用于较为复杂的流程控制switch:选择结构
多重分支并且条件判断是等值判断的情况。
学习不是纸上谈兵,实践出真知,分享给大家一句我特别喜欢的话
师傅领进门,修行看个人
持续更新中,收藏一下吧