每日一狗(边牧王可爱)
原文链接
1. eclipse 安装 2022
1.1 解压安装
1.2 测试
启动程序
指定工作目录项目存储目录
找到java项目
创建项目
本部分为密封包的设定,暂时不搞,等到面向对象时在来配置相关信息
1.3 修改eclipse jre虚拟机环境
出来这个就算好了finish
1.4 创建类
打开项目资源管理
创建类
命名规则
Java标识符
- 字母(Unicode编码字符集)、数字、下划线、$、构成,数字不打头
- 不允许使用保留字
- 长度没有限制
- 严格区分大小写(类名不区分大小写)
编码规范
- 类名首字母大写,大写字符分词,建议名词(UserName)
- 方法名称首字母小写,大写字母分词(userName)
- 变量名称首字母小写,大写字母分词(userName)
- 包名全小写,使用域名翻转的方式定义(com.lanou.20220706)
平时编码遵守sun公司给的规则,真实项目开发时遵守阿里的规则(进入公司先考察公司的编码风格)
2. 变量
2.1 基础设定
变量名称:一个方法内部不允许出现多个名称的变量
命名原则:见名知意
变量类型:
- 变量的存储空间,一旦声明责不能进行修改
- 数据类型决定要为该变量开辟多大的存储空间
- 变量名之间严格局分大小写
- 变量必须先定义后使用,先赋值在调用
- 局域变量作用域为当前方法内部(包括一个循环)
2.2 定义变量
有初值初始化
类型名 变量名 = 变量初始值;
无初值初始化
类型名 变量名;
2.3 Java是强类型语言
每个变量在创建的时候都被指定了固定的类型,Java编译器对所有的表达式和参数进行相容性的检查,以保证类型是兼容的。
强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。
什么是强类型语言,什么是弱类型语言,为什么python也是强类型语言。
基本数据类型:原子不可再分割的数据类型,其数据在函数的调用中是以传值的方式工作的。
引用数据类型:内部由其它基本数据类型或者引用数据类型组成。
2.4 基本类型(原生类型)
- 整形:字节、短整形、整形、长整型(取值范围不同 以此*2(一个字节))
- 浮点数:单精度浮点型、双精度浮点型
- 字符型:char
- 布尔类型:False、True
Java为基本数据类型提供了相对应的引用类型:包装类
2.5 整形
Java中间的整形存储形式为 补码
计算机存储数字:源码、反码、补码
- byte:1B(8b)-128~127
- short:2B 32767
- int:4B 2^(4*8-1)
- long:8B 2^(8*8-1)
负值比正值大1
实在要用就用包装类找
进制
- 二进制:以0b或者0B开头
- 八进制:以0开头 eg:-011 表示-9
- 十进制:
- 十六进制:以0x或者0X开头
2.6 浮点数
浮点数无法精确存放:底层存储方式为乘二取整法
(eg:十个0.1相加不等于一)
浮点数不能使用等值判断法,可以比较差值的大小
float:精度6到7位,范围e38
double:精度15到16,范围e308
2.7 char 字符类型
采用unicode编码
编码:0<A<a
实际存储的是编码,可以进行数学运算
奇奇怪怪的操作(挖坑组 转义字符反斜杠)
\ddd 1到3位8进制数所表示的字符(ddd) 例如'\110'实际就是字符H
\uxxxx 1到4位16进制数所表示的字符(xxxx),例如'\u9110'表示字符'鄐'
\’ 单引号字符,例如'\''
\" 双引号字符,例如'"'实际上是可以的,但是这样写可读性非常差,所以建议使用'\"'
\\ 反斜杠字符
浅试一下
char c='h';
System.out.println((int)c); //获取'h'字符对应的unicode编码值 104
//GB2312
System.out.println(c);
// c='ab' 语法报错,因为只能对应一个字符
//引入转移字符
c='\'';
c='\110';
System.out.println(c);//H
System.out.println((int)c);//72
c='\u0050';
System.out.println(c); //P
System.out.println((int)c);//80
2.8 bool布尔类型
不能直接跟其他类型进行数学运算
boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位 = 1个字节
boolean类型被编译为int类型,也就是说它的存储大小与int的大小一样,要占4个字节,暴殄天物呀!
2.9 常见数学计算
Math.sqrt()计算平方根
Math.pow(a, b)计算a的b次方
Math.max(a,b)计算最大值
Math.min(a,b)计算最小值
Math.abs()求绝对值
Math.舍入
ceil()天花板的意思,就是返回大的值;
floor()地板的意思,就是返回小的值,
round() 四舍五入,
float时返回int值,double时返回long值
Math.random() 取得一个大于或者等于0.0小于不等于1.0的随机数
2.10 类型转换
- 按照取值范围进行判断
- 大转小 需强转
- 小转大 自动转
long kk = 50;
double q = kk;
float f1 = (float)q // 强转
强制类型转换也名 窄化操作
注释:布尔类型转换为整形时会报错(无对应的映射关系)
2.11 案例1:接收键盘传入的半径,终端输出对应圆的面积
拆解问题
- 接收键盘输入
// TODO Auto-generated method stub
System.out.print("请输入圆的半径:");
Scanner sc = new Scanner(System.in);
int r = sc.nextInt(); // 用户输入数据
- 计算圆的面积
double res = 3.14 * r * r; // 计算半径
- 终端输出
System.out.println("圆的半径为" + r + ",面积为" + res); // 输出结果
2.12 常量
在程序中那些声明了就不打算在该的变量可以在声明的时候加一个final 关键字将其设定为常量
数学中常量是啥?1就是1,2就是2,是一个固定的数值。没听说过2啥时候变成1的,这个常量也一样,不能变
常量一旦赋值则不能被修改。
应用:可以在一个需要多次被调用还可能被后期变更设定的数据设定为常量,可以增添代码的可读性,对后期的维护也更加友好
3. 表达式
3.1 算术运算
会保留最大的范围的类型
双目运算符:要两个变量才能进行运算
+
-
*
/
% 求余
注释:求余运算不会
单目运算符:只要一个变量就行(变量写在前则先取值,变量在后则先运算)
++ :eg(x++ 等同于 x = x+1)
-- :eg(x-- 等同于 x = x-1)
3.2 关系运算符 >、<、>=、<=、==、!=
用于判断两个数据之间的大小关系,计算结果为boolean,如果成立返回为true,否则为false
整数就直接 == 来比较
浮点数可以用差值接一个精确度来进行比较,小于某个阈值就可以被判定为相等
核心: Math.abs(d1-1)<1e-6 判断浮点类型的变量d1的值是否为1
浮点数比较案例
double res = 0;
for(int i=0;i<10;i++)
res=res+0.1;
if(Math.abs(res-1)<1e-6) //|res-1|判断是否小于10的-6次方
System.out.println("计算结果为1");
else
System.out.println("计算结果不为1");
3.3 位运算
待补充
4. 课后作业
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
// 1、键盘录入升数,输出对应的加仑数 ===========================
// 键盘输入数据
System.out.println("请输入要计算的液体容量(单位:升,格式:小数)");
double v = 0.0;
v = sc.nextDouble();
// 计算结果 1 升 = 0.264172 加仑
double gal = v * L_TO_GAL;
// 显示输出
System.out.println("当前情况下" + v + "升液体等同于" + gal + "加仑液体!");
//2、键盘录入华氏温度,输出对应的摄氏温度值 ===========================
// 键盘输入数据
System.out.println("请输入需要计算的华氏温度:(格式:小数)");
double F = 0.0;
F = sc.nextDouble();
// 计算结果 摄氏度×9/5+32=华氏度。摄氏度=(华氏度-32)/(9/5)
double C = (F - 32) / 9 * 5;
// 显示输出
System.out.println("温度转换 " + F + "℉ = " + C + "℃");
//3、键盘录入公斤数,输出对应的磅数 ===========================
// 键盘输入数据
System.out.println("请输入需要计算的公斤数:(格式:小数)");
double KG = 0.0;
KG = sc.nextDouble();
// 计算结果 1公斤 = 2.20462262 磅
double pound = 2.20462262 * KG;
// 显示输出
System.out.println("按照当前的精度换算" + KG + " 公斤 = " + pound + " 磅");
//4、有5英亩的草地,一只羊每小时吃1.2平方米的草地的草,请计算多长时间可以吃完所有草地的草
// 换算面积 1 英亩 = 4046.864798 平方米
double yingMu = 5.0;
double mianJi = yingMu * 4046.864798;
// 计算结果
double yangEatTimeHour = mianJi / 1.2;
// 显示输出
System.out.println("按照1 英亩 = 4046.864798 平方米的换算比例来看 一只小羊 要 吃 " + yangEatTimeHour + "小时能吃完一遍草地!");
扩展小芝士
单个文件中main方法必须唯一
可执行程序在bin下
命名规则
Java标识符
- 字母(Unicode编码字符集)、数字、下划线、$、构成,数字不打头
- 不允许使用保留字
- 长度没有限制
- 严格区分大小写(类名不区分大小写)
编码规范
- 类名首字母大写,大写字符分词,建议名词(UserName)
- 方法名称首字母小写,大写字母分词(userName)
- 变量名称首字母小写,大写字母分词(userName)
- 包名全小写,使用域名翻转的方式定义(com.lanou.20220706)
平时编码遵守sun公司给的规则,真实项目开发时遵守阿里的规则(进入公司先考察公司的编码风格)
保留字or关键字(命名冲突加一)
保留字:官方不用,也不让我们用
关键字:官方在用
java不跟物理机打交道,知跟jre虚拟机相关
Java是完全面向对象的,但是其基本数据类型却并不是
这样设定为了执行效率。在面向对象中引入简单数据类型不会对程序的执行效率产生太多影响。
浮点数的存储(符号位、指数位、尾数)
就是将一个浮点数分为三部分
- 符号位:搬运
- 指数位:二进制小数的指数(这部分只能是正数)
- 真正的小数:将原始数据缩小到2以内,这一部分存储的是当前数据的小数部分
十进制除以2,让其搞到2以下,计数小数移动的个数为指数位,
单目运算符的大坑
// 就把离变量最近的两个字符先看成自增试试,看能不能良好的拆解
// 当然有编译工具时也可以使用代码格式化快捷键,直接一目了然
int k = 0;
int res = k++ + k++ + k;
System.out.println(res); //3
int m = 0;
res = ++m + m++ + m;
System.out.println(res); //4