3.1一个简单的Java应用程序
public class FirstSimple { public static void main(String[] args); { System.out.println("hello world!") } }
1.Java区分大小写
2.关键字public称为访问修饰符(access modifier)
3.关键字class表明Java程序中的全部内容都包含在类中。java应用程序中的全部内容必须放置在类中。其后面跟着类名。类名建议按照驼峰法来写。
4.源代码的文件名必须和公共类的名字相同,并用.java结尾。
5.System.out.println()表示使用了System.out对象,并调用了他的方法println。java的通用语法是obj.method(para)
6.以/**开头,以*/结尾的注释可以自动地生成文档。具体方法见第4章
3.2数据类型
public class Main { public static void main(String[] args) { double x1 = 0x1.0p-3; System.out.print(x); //0.125 without /n System.out.println(2.0-1.1); // 0.1250.89999999 int 我=1; // ‘我’可以作为变量,我是Unicode字符,属于java中的“字母” if (Character.isJavaIdentifierPart(我)) System.out.println(我); // 1 char l = '我'; if (Character.isJavaIdentifierStart(l)) System.out.println(l); // 我 } }
1.在java中,整型的范围与运行java代码的机器无关。
2.长整型后面有l或者L,十六进制0X或者0x,八进制前面是个0,二进制表示0b或者0B
3.java中没有任何无符号形式的int,long,short或byte类型。
4.java中默认的小数形式是double,如果是float需要在后缀加上F或者f,注因为是二进制表示法, 无法精确表达小数点后以5结尾以外的数字。如上例
5.可以使用十六进制表示浮点数值。0.125==0x1.0p-3 ,其中p表示以2为底的指数
6.Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY Double.NaN分别表示这三个特殊的值。其中NaN不是一个数值,所以不能使用==检测Double.NaN,但可以使用Double.isNaN(x)方法。
7.java中‘A’是编码值为65的字符常量(char),而"A"是一个字符串(String)。
8.java中 boolean类型有两个值false和true,整数值和布尔值之间不能相互转换。
9.与python不同,java声明变量后必须显式初始化,另外与C++不能,java不区别定义和声明。
10.如果想知道那些Unicode字符属于java中的“字母”,可以使用character类的isjavaIdentifierStart和isjavaIdentifierpart
11.在java中使用final指示常量。 final double PER=1.2;关键字final表示这个变量只能被赋值一次。在java中,经常希望某个变量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。
注意:类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且这个常量被声明为Public,那么其他类的方法也可以使用这个常量。
3.3运算符
public static strictfp void main(String[] args) { double x = 4; double y = Math.sqrt(x); // public static double sqrt(double a) System.out.println(y); // 2.0 public static final PrintStream out = null; System.out.println(-15%6); // -3 int a = Math.floorMod(-15,6); // like % ,but a little different System.out.println("a is " + a); // a is 3 System.out.println("π is" + PI); // here PI = Math.PI int b = 123465789; float c = b; System.out.println("b is " + b + ' ' + "c is " + c); // b is 123456789 c is 1.234567892E8是 10的8次但是多了一个2? double d = b +c; System.out.println("d is "+ d); // d is 2.46931584E8 x = 9.997; int nx = (int) x; System.out.println("nx="+nx); nx+=3.5; nx++; System.out.println("nx ="+nx); // 9+3.5 = 9+3=12 nx = (int)(nx +3.5),but nx = nx + 3.5 will error!
1.对于浮点数的算术运算实现可移植性是十分困难的。默认情况下,虚拟机设计者允许对中间计算结果采用扩展的精度。但是,对于使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。
比如public static strictfp void main(String[] args)
2.在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。其中Math.sqrt()方法和System.out.println()方法不同。前者属于静态方法。后者处理System.out对象。另外Math类中还有pow(x,a)求x的a次幂的方法,floorMod对整数求余的方法,效果相当于%,但对于负数的余数取绝对值了。
3.Java中使用Math.PI和Math.E表示π和e的近似值。
4.不要再boolean类型与任何数值类型之间进行强制类型转换,这样可以防止发生错误。(那么问题来了,如何对int String boolean之间转换呢?)
5.如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。例如int x = 1;x+=3.5;// 1+3.5=4【这个和双目运算符不同!】
6.自增和自减和cpp一样,也有前缀和后缀之分,前缀先加再使用变量;后缀先使用变量再加。Java中的关系运算和cpp中也一样,按照“短路”的方式计算的,&& ||分别表示逻辑与和逻辑或,如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。
e.g. x != 0 && 1 / x>x+y // no division by 0。如果x等于0,那么第二部分就不会计算。因此,如果x为0,也就不会计算1/x
7.与Cpp不同,java的>>>会用0填充,>>用符号位填充。
8.运算符优先级