内容提前看
- 数据类型与存储
- final关键字
- 代码实现十进制转二进制
一、数据类型与存储
-
标识符的特殊字符只能有:$与_
-
命名规则
- 类:大驼峰法 HelloWorld StringUtils DaTeUtil DataConvert
- 方法和变量:小驼峰 getData queryByTagName productID
- 常量:一个单词时,全大写 final MAX_COUNT CIRCLE_PI
- 包名:域名倒写 com.jd.common.utils com.alibaba.shop.data.po
-
常量: 两类
- 字面值常量:各类数值
- 自定义常量:
-
数据存储方式:进制:
- 无符号: 0-255 可以表示256个数,Java中是没有无符号位的,都是有符号的,如果遇到类似C#中的有符号位时只能扩容,使用short增加取值范
- 有符号:第一位是符号位 byte,取值-128至127(-128即-0的另一个表示)
进制之间快捷转换:128-64-32-16-8-4-2-1法
8 4 2 1法
十转八:先转二进制,再分每3个一位,范围是0-7
60——>0 0 1 1 1 1 0 0——>111(7) 100(4)——>74
十转十六:先转二,再每4个一位 0011(3)1100(C)——>3C
(十六进制是0-9 A-F:1100即8+4=12 对应就是C)
-
数据类型:
-
引用类型:数组 接口 类
-
基本类型:
- 整数类型:byte(1字节-127-127) short(2个字节-32768-32767) int(4个字节) long(8个字节,时间毫秒值)
- 浮点类型:float(4个字节) double(8个字节)
- 布尔类型:boolean(1个字节)
- 字符类型:char(2个字节)
小扩展
float与double区别:
-
表示方法不同:float值必须最后加f
float val1 = 0.0087631f; double val2 = 0.388387328734;
-
float小数位最多只能到8位有效数字(整数加小数最多8位,不够的小数直接取整,超过用指数表示),double可以表示的有效数字16位
-
取值范围:float:-3.40E+38~3.40E+38 double:-1.79E+308~1.79E+308
-
占字节不同,float四个字节,double八个字节
float val1 = 3832974.3473297432f; float val3 = 13832974.3473297432f; //加一位后1.3832974E7 直接把小数点舍弃并用指数表示 double val2 = 3832974.3473297432; System.out.println("float:" + val1); System.out.println("float(加长一位):" + val3); System.out.println("double:" + val2);执行结果:
float:3832974.2
float(加长一位):1.3832974E7
double:3832974.347329743
-
二、引申知识:final关键字
final关键字:
用来限制变量(包括本地变量、成员变量、方法、类。
规则:一旦使用了final后,你必须紧接着给它做初始化,当初始化后就不可以再次初始化或改变的的值或引用。
final的基本用法
-
限定变量:定义时初始化后值不可再更改
-
限定方法:
方法前加final,表示此方法已被终结,不能再进行重写,我认为此方法已经够用了,它就变成了静态绑定,在运行时就不需要再重新动态进行绑定了,理论上应该更快一些
public class MethodFinalDemo{ public final void show(){ System.out.print("我不需要重写!"); } } //当你试图在子类中去重写时,编译就会报错 public class SubMethodFinal extends MethodFinalDemo{ @override public void show(){ //…… } } -
限定类:限定类时代表此类已经被阉割,不能再进行包装或扩展了,JDK类库最常用的方式
三、十转二进制
package com.xyto.Basicdemo;
import java.util.Scanner;
public class TestFinalDemo {
public static void main(String[] args) {
double d = 0.0;
System.out.println("请输入你要转换的数字:");
Scanner scan = new Scanner(System.in);
d = scan.nextDouble();
System.out.println("转换后的二进制是:" + ConvertTenToBina(d));
}
/**
* 十进制转二进制
*/
static String ConvertTenToBina(double t) {
StringBuilder builder = new StringBuilder();
// String str = "";
double val1 = 0;
do {
if (t % 2 == 0) {
builder.append(0);
} else {
builder.append(1);
}
val1 = t / 2;
// 判断数值大小,一千万以上用Math往下取整,以下用自定义的取整
if (t > 9999999)
t = Math.floor(val1);
else
t = trimFloat(val1);
} while (val1 > 0);
return builder.reverse().toString();
}
/**
* 截取整数部分,只适合于数值低于一千万的十进制
*/
static long trimFloat(double d) {
// 1先转换为整数
String str1 = String.valueOf(d);
double sourceDigt = 0;
if (str1.contains("E")) {
// 取出E前面的值
String getE1 = str1.substring(0, str1.indexOf("E"));
// 取出指数后的值
String getE2 = str1.substring(str1.indexOf("E") + 1, str1.length());
// 计算它的实际大小并返回给小数点截取
sourceDigt = Double.valueOf(getE1) * Math.pow(10, Double.valueOf(getE2));
} else {
sourceDigt = d;
}
// 2找到小数点位置
int position = String.valueOf(sourceDigt).indexOf(".");
// 3截取整数部分
String strResult = String.valueOf(sourceDigt).substring(0, position);
long res = Long.valueOf(strResult);
return res;
}
}










网友评论