java基础入门篇学习笔记
符号类型:
1.在C和C++中,int表示的整型与目标机器相关。在16位cpu上整型占2字节,在32位上占4字节;而在intel pentium的cpu上,
C和C++整型依赖于具体的OS,对于DOS和Windows3.1,整型占2字节,当Windows使用32位模式时,整型占4字节。
java没有无符号类型。
2.float类型的数值有一个后缀F。没有的浮点数值默认为double类型(也可以在后面添加后缀D以示区分).
一):这种方法方便,我就使用这种方法
代码如下 | 复制代码 |
float a = 123.2334f; float b = (float)(Math.round(a*100))/100;( |
这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000)
(二):这个方法也简单,不过还要再转成float型:
代码如下 | 复制代码 |
import java.text.DecimalFormat; String a = new DecimalFormat("###,###,###.##").format(100.12345 ); |
(三):这个也可以用
代码如下 | 复制代码 |
float ft = 134.3435f; |
3.char采用UTF-16编码,占2字节,建议不要在程序中使用char类型
代码点:
代码点在U+0000到U+FFFF之间的就用u0000到uffff表示
U+10000到U+1FFFF之间的用 ud800到udbff中的作为第一个单元, 用udc00到udfff作为第二单元,组合起来表示
char这个概念就是指u0000到uffff,这是占两个字节
其余的用code point这个概念
可能作为java表示符的字符用isJavaIdentifierStart和isJavaIdentifierPart确认
与一个编码表中的某个字符对应的代码值。在Unicode标准中,代码点采用16进制表示,并加上前缀U+,如U+0041表示字母A的代码点。
Unicode的代码点分成17个代码级别.基本的多语言级别(BMP):U+0000~U+FFFF(包括经典的Unicode代码),每个字符用16位表示,称为
代码单元;剩余的16个附加级别:U+10000~U+10FFFF(包括一些辅助字符),采用一对代码单元编码(第一个代码单元:U+D800~U+DBFF,
第二个代码单元:U+DC00~U+DFFF).例如:对于整数集合的数学符号,它的代码点是U+1D56B,并且是用两个代码单元U+D835和U+DD6B
编码的。
类型转换:
下图为合法的类型转换,3个虚箭头表示可能有精度损失的转换。
1.两个数值进行二元操作时,有一个是double、float、long类型时,另外一个自动提升为对应类型;其他的类型转换都提升为int型;
2.如果想对浮点数进行舍入运算,以便得到最接近的整数,就应使用Math.round方法:
代码如下 | 复制代码 |
double x=9.99; int nx=(int)Math.round(x); |
是否可以四舍五入呢?当然可以,习惯上我们本能就会这样考虑,但四舍五入意味着误差,商业运算中可能意味着错误,同时Java中也没有提供保留指定位数的四舍五入方法,只提供了一个Math.round(double d)和Math.round(float f)的方法,分别返回长整型和整型值。round方法不能设置保留几位小数,我们只能象这样(保留两位):
代码如下 | 复制代码 |
public double round(double value){ return Math.round( value * 100 ) / 100.0; } |
但非常不幸的是,上面的代码并不能正常工作,给这个方法传入4.015它将返回4.01而不是4.02,如我们在上面看到的
代码如下 | 复制代码 |
4.015 * 100 = 401.49999999999994 |
因此如果我们要做到精确的四舍五入,这种方法不能满足我们的要求。
还有一种方式是使用java.text.DecimalFormat,但也存在问题,format采用的舍入模式是ROUND_HALF_DOWN(舍入模式在下面有介绍),比如说4.025保留两位小数会是4.02,因为.025距离” nearest neighbor”(.02和.03)长度是相等,向下舍入就是.02,如果是4.0251那么保留两位小数就是4.03。
代码如下 | 复制代码 |
System.out.println(new java.text.DecimalFormat("0.00").format(4.025)); System.out.println(new java.text.DecimalFormat("0.00").format(4.0251)); 输出是 4.02 4.03
|
字符串:不可变字符串String的含义:不能修改字符串中的某个字符,但可以进行拼接等操作(其实也是调用StringBuild来操作).
字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。例如:
代码如下 | 复制代码 |
String str = "abc"; |
等效于:
代码如下 | 复制代码 |
char data[] = {'a', 'b', 'c'}; String str = new String(data); |
下面给出了一些如何使用字符串的更多例子:
代码如下 | 复制代码 |
System.out.println("abc"); String cde = "cde"; System.out.println("abc" + cde); String c = "abc".substring(2,3); String d = cde.substring(1, 2); |
优点:编译器可以让字符串共享。
注:java字符串不是C字符型数组,而更像char *指针。
==与equals方法的区别:
==只能确定两个字符串是否放在同一个位置(地址);而equals检测两字符串的值(即内容)是否相等。只有字符串常量是共享的,
可以用==;而+或substring操作的结果不是共享的。
在java中不允许嵌套定义一个变量。
多维数组:数组的数组(不规则)
可变参:
代码如下 | 复制代码 |
printf方法定义: type var[]; 或type[] var; |
声明数组时不能指定其长度(数组中元素的个数),
Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]
实例:
TestNew.java:
程序代码:
代码如下 | 复制代码 |
public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i < 5 ; i++) { s[i] = i ; } for(i = 4 ; i >= 0 ; i--) { System.out.println("" + s[i]) ; } } } |
初始化:
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
实际上,printf方法接收两个参数:一个是格式字符串,另一个是Object[]数组(等同于Object...),其中保存着所有的参数(整型
数组或基本类型自动打包转换成对象)。然后扫描fmt字符串,并将第i个格式说明符与args[i]的值匹配起来。
补充:Jsp教程,Java基础