java的数据类型,几个java小程序
1:求圆的面积
还好看了c++,不然直接看这课件还真是看不懂……加油吧
要从键盘读入数据可以用Scanner类的nextlnt()或者nextDouble()方法,首先创建Scanner类的一个实例,然后调用nextDouble()方法读取double数据,
由于Scanner类存放在java.util包中,因此程序使用import包导入该类
在main方法中使用Scanner类的构造方法创建了一个Scanner类的一个对象,在其构造方法中以标准输入System.in作为参数,
得到Scanner对象之后就可以调用它的有关方法获得各种类型的数据,程序中使用nextDouble()方法得到一个浮点型数据,
然后将其赋给double型的变量radius,最后输出语句输出以该数为半径的圆的面积,程序中圆周率使用Math类的PI常量
package computerArea; import java.util.Scanner; public class ComputerArea { public static void main(String[] args){ double radius; double area; Scanner input = new Scanner(System.in); System.out.println("请输入半径值:"); radius = input.nextDouble(); area = Math.PI*radius*radius; System.out.println("圆的面积为:" + area); } }
2:数据类型
package computerArea; import java.util.Scanner; /*infinity的意思是无穷大 * 字符型字面常量用单引号将字符括起来,比如'我' 'a' '@'等 * 对于不能用单引号直接括起来的负号,需要使用转义序列来表示,用 '\'来表示转义*/ //另外注意所有关系表达式的返回值都是布尔类型的数据 比如表达式 10 < 9 的结果为false public class ComputerArea { public static void main(String[] args){ boolean t = true; byte b = 0x18; short s = 0200; int i = 0b101010; long l = 0x111_111_11L; //数字中间可以加下划线增加代码可读性,数值不变 float f = 100.33_3F; double d = .00001005; System.out.println("boolean t = "+t); System.out.println("byte b = "+b); System.out.println("short s = "+s); System.out.println("int i = "+i); System.out.println("long l = "+l); System.out.println("float f = "+f); System.out.println("double d = "+d); System.out.println("\u4F60\u597D"); //前者是'你'的unicode码,后者是'好'的unicode码 } }
3:boolean数据,字符数据
package computerArea; import java.util.Scanner; public class ComputerArea { public static void main(String[] args){ boolean b; char ch1, ch2; ch1 = 'Y'; ch2 = 65; System.out.println("ch1 = "+ch1+",ch2 = "+ch2); b = ch1 == ch2; System.out.println(b); ch2++; System.out.println("ch2 = "+ch2); } }
4:String的使用
package computerArea; import java.util.Scanner; public class ComputerArea { public static void main(String[] args){ String s1 = "java strings" + " are inportant."; String s2 = "This is an inportant" + " point to note."; String s3 = "String number "+'d'+3; System.out.println(s1+"\n"+s2+"\n"+s3); /*当+运算符的两个操作数一个是字符串而另一个是其他数据类型, * 系统会自动将另一个操作数转换成字符串,然后再进行连接*/ int x = 1, y = 2, z = 3; System.out.println("abc"+x + y + z); //输出abc123 System.out.println(x + y + z+"abc"); //输出6abc } }
/*constant是在程序运行过程中,其值不能被改变的量,常量实际上是由final关键字修饰的变量
* 常量可以在声明同时赋值,也可以声明后赋值,一旦赋值,不可修改
* 例如final double PI = 3.1415926;
* final int MAX_ARRAY_SIZE = 22;
* final int SNO;
*字面量:
*字面量(literals)是某种类型值的表示形式,字面量有三种类型:基本类型的字面量、字符串字面量以及null字面量
*。基本类型的字面量有4种类型:整数型、浮点型、布尔型、字符型。如123、-789为整型字面量,
*3.456、2e3为浮点型字面量,true、false为布尔型字面量,'g'、'我'为字符字面量。*/
/*infinity的意思是无穷大
* 字符型字面常量用单引号将字符括起来,比如'我' 'a' '@'等
* 对于不能用单引号直接括起来的负号,需要使用转义序列来表示,用 '\'来表示转义*/
\ddd 三位八进制数表示的字符
\uxxxx 四位十六进制数表示的字符
java中有自动类型转换和强制类型转换,自动类型转化也称加宽转换,它是将具有较少位数的数据类型转换成为具有较多位数的数据类型
从一种整数类型转化为另一种正数类型是,不会有信息丢失的危险。同样,从float转化为double也不会丢失信息。但从int或long转化为float,
从long转化为double可能发生信息丢失。
比如下面
输出结果是1.23456792E8,损失了精度
布尔类型的数据不能和其他任何类型的数据相互转换
下面演示下类型转换的一个特殊情况
package computerArea; public class ComputerArea { public static void main(String[] args){ byte a = 40; byte b = 50; byte c; //c = a + b; //注意这句编译不通过, c = (byte)(a+b); int i = a + b; System.out.println("a+b = "+c); System.out.println("a+b = "+i); } }
我们可以看到a(40)和b(50)都是byte类型的变量,它们的和不超过byte类型的最大值,但是如果将其赋给byte类型的变量c将产生编译错误,这是因为,在计算表达式a+b的时候,编译器首先将操作数类型提升为int类型,最终计算出来a+b的结果90是int类型,如果要将计算结果赋给c,必须使用强制类型转换。这就是所谓的表达式类型的提升。
自动类型转化和强制类型转化也发生在对象中,对象的强制类型转换也使用括号实现
递归小程序求阶乘
package test; public class RecursionTest { public static long factor(int n){ if(n == 0) return 1; else return factor(n-1)*n; } public static void main(String[] args){ System.out.println(20+"的阶乘为"+factor(20)); System.out.println("max = "+Long.MAX_VALUE); //long 类型的最大值 } }