Java基础2

今天学习了Java的更多知识

Java标识符

标识符可从一个字母(Unicode编码字符集)、下划线_或美元符号$开始,随后也可跟数字、字母、下划线 或美元符号。 标识符是区分大小写,没有长度限制,可以为标识符取任意长度的名字 标识符不允许使用保留字。关键字对Java编译器有特殊的含义,它们可标识数据类型名或程序构造 construct名, java语言中的保留字均用小写字母表示 变量 变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分 例如int k=100;  其中int是数据类型,k是变量名 m 变量名称:在一个方法内部不允许出现多个同名称的变量 java要求见名知意,例如username。但是xm则不建议使用 变量类型: Java属于强类型编程语言,变量类型一旦声明,则不能进行修改 数据类型可以决定变量所需要的存储空间大小和对应的处理逻辑 作用域是指变量的有效范围,一般是在所在花括号范围内 ; int k; 声明一个变量,类型为整形,变量名称为k int k=100; 声明变量的同时进行初始化 k=12.345; 语法错误,因为已经声明了类型为整形,但是12.345不是整数 d=123; 语法错误,因为Java语法要求对于变量必须是先定义后使用 public static void main(String[] args){ { System.out.println(k);//错误1:要求临时变量必须是先定义后使用,必须是先赋初值后使 用 int k=100; System.out.println(k); } System.out.println(k);

JAVA是强类型语言

每个变量有类型,每个表达式有类型,而且每种类型都是严格定义的 Java编译器对所有的表达式和参数都要进行类型相容性的检查,以保证类型是兼容的 任何类型的不匹配都将被报告为错误而不是警告。在编译器完成编译以前,错误必须被改正过来 在Java语言数据类型可以分为两大类:基本类型和引用类型 基本类型(原生类型) 基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的。 简单数据类型代表单值,而不是复杂的对象 Java是完全面向对象的,但简单数据类型却不是,它们类似于其他大多数非面向对象语言中的简单数据 类型。这样做的原因是出于效率方面的考虑。在面向对象中引入简单数据类型不会对执行效率产生太多 的影响。 Java针对基本类型同时提供了对应的引用类型:包装类 Java编程语言有八个原始数据类型,可分为4种整型、浮点数、字符型数据和布尔型数据,不会随着计算 机类型而变化的,注意Java具有平台无关性,所以不论硬件平台是什么,1B都是8位 整型有4种:byte字节整、short短整、int整、long长整 java中的数据采用的是补码的存储方式 计算机中存储数据有3种不同的方式,分别是原码、反码和补码 byte:1B(8b),-128到127 public static void main(String[] args){ int k=99; { System.out.println(k); int k=100; //错误:因为Java是强类型编程语言,所以在{}外已经声明了k的类型,在k的有效 范围内不允许重新声明。这里可以修改为k=100; System.out.println(k); } System.out.println(k); } short k1=123; int k2=k1;//没有错误 String s1="123";//字符串类型 int k1=s1;//语法报错 byte k = 100;//语法正确100在指定范围内 byte kk = 130;//语法报错,因为130超出byte的存储范围限制 //这里的面试点在常量池 short:2B,-32768到32767 int:4B,-2147483648到2147483647 long:8B,-9223372036854775808到9223372036854775807 如果需要使用具体的上下限取值,可以通过包装类中的常量进行使用 十进制整数。如123,-456,0 八进制整数。以0开头,如0123表示十进制数83,-011表示十进制数-9。 十六进制整数。以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18 a-->10 b-->11 c-->12 d-->13 e-->14 f-->15 二进制整数,以0b或0B开头,例如0b10110010 可以通过包装类中提供的方法将十进制数转换为2、8和16进制 整数类缺省为int类型,如在其后有一个字母“l或者L”表示一个long值 浮点数类型 float单精度、double双精度 float是4B,可以保证小数点后6位有效精度和第7位的部分精度 e38 double是8B,可以保证小数点后15位有效精度和第16位的部分精度。e308 浮点数是无法精确存放的,原因在于将浮点数转换为补码时的限制 System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); int k1=123; int k2=0123; int k3=0x123; int k4=0b100101; System.out.println(k1+"\t"+k2+"\t"+k3+"\t"+k4);//具体输出时,系统会自动将k2转换为10进 制输出 int k = 123; String ob=Integer.toBinaryString(k);//将十进制数转换为2进制的字符串 System.out.println(ob); //1111011 String oo=Integer.toOctalString(k); System.out.println(oo); //173 String oh=Integer.toHexString(k); System.out.println(oh);//7b 123系统会自动识别为int类型 123L或者123l系统自动识别为long

Java精确计算问题

关键字strictfp是strict float point的缩写,指的是精确浮点,它是用来确保浮点数运算的准确性。 JVM在执行浮点数运算时,如果没有指定strictfp关键字,此时计算结果可能会不精确,而且计算 结果在不同平台或厂商的虚拟机上会有不同的结果,导致意想不到的错误。而一旦使用了strictfp 来声明一个类、接口或者方法,那么在所声明的范围内,Java编译器以及运行环境会完全依照IEEE 二进制浮点数算术标准来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的。 需要注意的是,当一个类被strictfp修饰时,所有方法都会自动被strictfp修饰。因此,strictfp可以保证 浮点数运算的精确性,而且在不同的硬件平台会有一致的运行结果。但是精确计算事实上还是没有得到 保障,这是受到存储方式的限制。需要精确计算还是以来BigDecimal实现的。 常见数学计算 Java的Math类中包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。 Math的方法都被定义为static 形式,通过Math类可以在主函数中直接调用。 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值 random 取得一个大于或者等于0.0小于不等于1.0的随机数 字符类型 char Java中存放字符采用的是Unicode编码字符集,2B,0-65535 字符类型的变量可以当作整数使用 char c='a'; 注意:这里使用的是单引号,不是双引号,单引号中只能包含一个字符 需要记忆: '0' < 'A' <'a' Java也提供转义字符,以反斜杠(\)开头,将其后的字符转变为另外的含义 int k=16; //如果不能执行计算,则返回NaN double res=Math.sqrt(k); System.out.println(res); double d1=-1234.567; System.out.println(Math.ceil(d1));//-1234.0 System.out.println(Math.floor(d1));//-1235.0 System.out.println(Math.round(d1)); //-1235 容易出错的位置 d1=1234.567; System.out.println(Math.ceil(d1)); //1235.0 System.out.println(Math.floor(d1));//1234.0 System.out.println(Math.round(d1)); //1235 基本使用 布尔类型  boolean boolean数据类型有两种文字值:true真和false假 在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算 boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是 boolean也是4字节 boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位=1字节 基本数据类型转换 小转大自动转换 大转小需要强制转换 \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 byte b1=123; long k1=b1; double kk=k1; System.out.println(kk); long kk = 123456L; float ff=kk; //没有错误。float 4B long 8B double dd=123.567; long kk=(long)dd; System.out.println(kk); 类型转换的语法: double 复合数据类型 复合数据类型包括:class类、interface接口、数组。 null 索引在运行时并没有对应的类型,但它可以被转换为任何类型(不能是简单类型)。 索引类型的默认值就是null 常量 常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量123,实型常量 1.23,字符常量'A',布尔常量true等 需求:要求用户键盘输入一个整数的半径值,计算园的面积 int k=100; char cc=(char)k; //强制类型转换:窄化操作 char k='d'; System.out.println((int)k); boolean bb=true; System.out.println((int)bb);//因为boolean类型和数值类型之间没有任何对应关系,所以这里的强 转会报语法错误 float f1=123.456;//语法报错,因为系统默认带小数点的数据为double类型,所以123.456是double 类型的数据,而声明f1为float,所以这里需要进行数据类型转换或者进行特殊声明。如果浮点数转换为整数 是直接截断小数部分。 float f1=(float)123.456; float f1=123.456f; //数字末尾的f类似于数字末尾的L,用于进行数据类型的说明,f/F表示这是一个 float类型的数据 d/D表示是一个double类型的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值