熟悉JAVA IDE(Eclipse/IDEA)的使用,编写一些简单的小程序。熟悉C++/C语言的话,上手JAVA基础部分还是很快的,多注意一下不同之处。文中若有错误请及时指出,感谢阅读。
零、Helloworld
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}
一、常用变量的输入与输出
import java.util.Scanner;
public class Main
{
public static void main(String []args){
Scanner cin = new Scanner(System.in);
int a = cin.nextInt(); // 整型
double d = cin.nextDouble(); // 浮点型
char ch = cin.next().charAt(0); // 字符型
String s = cin.next(); // 字符串
System.out.println(a);
System.out.println(d);
System.out.println(ch);
System.out.println(s);
}
}
二、输出常用格式
public class Main
{
public static void main(String[] args)
{
int i = 100;
char ch = 'A';
double d = 9.99999;
String s = "I LOVE java";
System.out.printf("Result = %d %c %f %s\n", i, ch, d, s);
}
}
注意:区别System.out.println与System.out.print与System.out.printf三种输出。
三、JAVA小程序
说真的,JAVA的小应用程序不好玩。
import java.awt.Graphics;
import java.applet.Applet;
public class SayHello extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello, JAVA", 35, 30);
}
}
我是在Main.class中写这个的,所以编译的时候报了错误:Error:(6, 8) java: 类SayHello是公共的, 应在名为 SayHello.java 的文件中声明。当我把SayHello改成Main的时候它就没有报错了,编译运行后弹出了一个小窗口,也就是java小程序。但是还是有一句警告:警告: 无法读取 AppletViewer 属性文件: /home/taifu/.hotjava/properties。请使用默认值。
四、整型和字符型变量的最值
JAVA字符型变量采用了Unicode编码,数据长度为16位(两个字节),这和C、C++不同(C、C++中char是一个字节占8位)。
public class Main
{
public static void main(String [] args)
{
System.out.println("byte 最大值 = " + Byte.MAX_VALUE); // 8位
System.out.println("byte 最小值 = " + Byte.MIN_VALUE);
System.out.println("short 最大值 = " + Short.MAX_VALUE); // 16位
System.out.println("short 最小值 = " + Short.MIN_VALUE);
System.out.println("int 最大值 = " + Integer.MAX_VALUE); // 32位
System.out.println("int 最小值 = " + Integer.MIN_VALUE);
System.out.println("long 最大值 = " + Long.MAX_VALUE); // 64位
System.out.println("long 最小值 = " + Long.MIN_VALUE);
System.out.println("char 最大值 = " + (int)Character.MAX_VALUE); // 16位
System.out.println("char 最小值 = " + (int)Character.MIN_VALUE);
}
}
/*
byte 最大值 = 127
byte 最小值 = -128
short 最大值 = 32767
short 最小值 = -32768
int 最大值 = 2147483647
int 最小值 = -2147483648
long 最大值 = 9223372036854775807
long 最小值 = -9223372036854775808
char 最大值 = 65535
char 最小值 = 0
*/
五、浮点型变量的最值
public class Main
{
public static void main(String [] args)
{
// float f = 3.14; // 错误,值3.14属于double类型,其与变量f不相容
double d = 3.14; // 正确
float f = 3.14f; // 正确
System.out.println("float 最大值 = " + Float.MAX_VALUE);
System.out.println("float 最小值 = " + Float.MIN_VALUE);
System.out.println("double 最大值 = " + Double.MAX_VALUE);
System.out.println("double 最小值 = " + Double.MIN_VALUE);
System.out.println("float 无限大值 = " + Float.POSITIVE_INFINITY);
System.out.println("float 无限小值 = " + Float.NEGATIVE_INFINITY);
System.out.println("double 无限大值 = " + Double.POSITIVE_INFINITY);
System.out.println("double 无限小值 = " + Double.NEGATIVE_INFINITY);
}
}
/*
float 最大值 = 3.4028235E38
float 最小值 = 1.4E-45
double 最大值 = 1.7976931348623157E308
double 最小值 = 4.9E-324
float 无限大值 = Infinity
float 无限小值 = -Infinity
double 无限大值 = Infinity
double 无限小值 = -Infinity
*/
六、JAVA原子类型变量生存空间,区别于C、C++
{
int x = 1;
{
int x = 0; // 错误
}
}
JAVA编译器认为,变量x已经定义过,而C、C++具有”小范围变量屏蔽大范围变量“的能力,但JAVA不提供这种功能。
七、变量初始值问题
未赋初值的变量具有默认值,byte = 0
, short = 0
, long = 0
, int = 0
, char = '\u0'
, float = 0.0f
, double = 0.0d
, boolean = false
,但是在方法(函数)内定义的局部变量,应当对其赋值,否则无法通过编译,区别于C++。
注意:JAVA中浮点类型(即小数)默认为double类型,要申明为float类型的话要在数后加f。所以float = 3.14
是错的,float = 3.14f
是对的,double d = 3.14
是对的。
class Test
{
int Value; // 类中的变量未赋初值,默认就是0
}
public class TestVal
{
public static void main(String [] args)
{
int x = 100; // 此处的x必须赋值,否则无法通过编译
}
}
八、数组
感觉JAVA中int [] a;
这种[]放在数组名前以及[]和数组名之间有空格的写法很奇怪,不习惯,还是使用int a[];
比较好。
public class Main
{
public static void main(String [] args)
{
// JAVA不允许在定义数组时指定数组的大小。
// int a[]; // 定义一个数组,a仅仅是一个引用,代表一个数组名,但没有对应的存储空间
// int[] a; // 同上
// int a[] = {1, 2, 3}; // 在定义时直接赋值
// int a[] = new int[10]; // 通过new运算符分配空间
int a[] = {1, 2, 3}, b[];
b = a;
for (int i = 0; i < 3; ++i)
b[i]++;
for (int i = 0; i < 3; ++i)
System.out.print(a[i] + "\t");
}
}
/*
2 3 4
*/
注意:程序将b数组元素的值分别加1,结果数组a的元素值也发生相应的变化,b=a,实际上是给对象a另起了一个别名b,也就是c++中的引用,当通过b修改元素时,a中的值就变了。
数组长度,使用数组名.length。
public static void test()
{
int a[] = new int[6];
System.out.println("the length of the array =" + a.length);
for (int i = 0; i < a.length; ++i)
System.out.print(a[i] + " ");
System.out.println();
}
// the length of the array =6
// 0 0 0 0 0 0
二维数组
即由一位数组构成的一维数组。JAVA保证数组一定会被初始化,并对数组提供了下标越界检查机制,即所有下标必须大于等于0且小于等于数组长度减1。如果越界,会报异常信息。JAVA中的数组实际上是对象。
public static void arrays()
{
int a[][]; // 定义一个引用a
a = new int[2][]; // 产生a[0]和a[1]两个引用
a[0] = new int[2]; // 给引用a[0]产生2个对象
a[1] = new int[3]; // 给引用a[1]产生3个对象
System.out.println("the length of a =" + a.length);
System.out.println("the length of a[0] =" + a[0].length);
System.out.println("the length of a[1] =" + a[1].length);
}
/*
the length of a =2
the length of a[0] =2
the length of a[1] =3
*/
a[0][3] = 100; // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
数组初始化
即在为数组的元素分配空间的同时,为每个数组元素赋初始值。JAVA数组必须先初始化,然后才能使用。
- 静态初始化(只指定数组元素的初始值,不指定数组长度,由系统决定数组的大小)
int a[] = new int[] {10, 20, 30, 40};
int []a = {10, 20, 30, 40};
int a[] = {10, 20, 30, 40}; // good
- 动态初始化(程序员只指定数组长度,由系统为数组分配初始值)
int a[] = new int[5]; // 数组a中的5个元素的值均为0
注意:不要静态初始化和动态化同时使用,在进行数组初始化时不要既指定长度又赋值。
int a[] = new int[3]{10, 20, 30}; // error
int a[];
a = new int[]{10, 20, 30}; // right
int a[];
a = new int[3]{10, 20, 30}; // error
九、JAVA中的参数传递方式
C++中可以传值和传引用,可以随意选择,JAVA中参数的传递方式也有两种,但是不允许随意选择。
注意:JAVA规定基本类型按值传递,对象类型按引用传递。通过return语句从方法中返回时,基本类型总是以值的方式返回,而对象总是以引用方式返回。
class test
{
int x;
}
public class Main
{
static test fun(test o, int y) // 对象按引用传递,基本类型按值传递
{
o.x = 20; // 修改了对象的数据成员
y = 1; // 修改了变量y的值
return o;
}
public static void main(String[] args)
{
test obj1, obj2;
int Val = 3;
obj1 = new test( ); // 产生一个对象
System.out.println(obj1.x); // 0
obj1.x = 100;
System.out.println(obj1.x); // 100
obj2 = fun(obj1, Val);
System.out.println(obj1.x + " " + obj2.x + " " + Val); // 20 20 3
}
}
JAVA中的关键字NULL代表一个没有分配空间的引用,比如int a[];
,a是一个引用,没有空间,值为NULL,同上面程序中处于15行时的对象obj1和obj2。
十、JAVA的运算符
JAVA中的运算符大部分和C、C++一样,用法也相似,我们求同存异。
算术运算符
JAVA中的算术运算符:+、-、*、/、%、++和--,与C/C++基本相同。只有%运算符进化了,%运算符不但可以对整形数据运算,而且可以对浮点型数据运算。
public class Main
{
public static void main(String[] args)
{
double a = 3.14;
double b = 0.56;
double c = a % b;
System.out.println(c);
// 0.33999999999999986
}
}
关系运算符
JAVA关系运算符有>、<、>=、<=、==和!=,它们的运算结果是一个boolean类型的值,要么是true,要么是false,不能同其它类型的变量一同参与运算。
逻辑运算符
JAVA逻辑运算符有&&、|| 和!,分别是与、或和非,运算结果也是一个boolean类型的值,true或false。注意,逻辑运算有求值“短路”现象,具体不解释了,看代码。
public class Main
{
public static void main(String[] args)
{
int a = 1;
int b = 0;
boolean f = ((++a > 0) || (++b > 0));
System.out.println(f);
System.out.println(a + " " +b);
}
}
// true
// 2 0
位运算符
JAVA位运算符有&、|、^、~、<<、>>,分别称为位与、或、异或、左移、右移,注意JAVA引入一个专门用于逻辑右移运算符>>>,它采用了所谓的零扩展技术,不论原值是正或负,一律在高位补0。
public class Main
{
public static void main(String[] args)
{
int a = 1;
int b = 2;
System.out.println(a | b);
System.out.println(a & b);
System.out.println(a ^ b);
System.out.println(~a);
System.out.println(a << b);
System.out.println(a >> b);
System.out.println(-8 >>> 2);
System.out.println(8 >>> 2);
}
}
// 3
// 0
// 3
// -2
// 4
// 0
// 1073741822
// 2
三元条件运算符
就是C、C++中的三目运算符吧,(statement1) ? (statement2) : (statement3)等价于一个if else语句。
public class Main
{
public static void main(String[] args)
{
int a = 1;
int b = 2;
int c, d;
c = a > b ? a + b : a - b;
if (a > b)
d = a + b;
else
d = a - b;
System.out.println(c + " " + d);
}
}
// -1 -1
+运算符
JAVA不允许程序员实现自定义的运算符重载,但JAVA对“+”进行了重载,可以将任何类型的对象(包含原子类型)转化为String类型。
public class Main
{
public static void main(String[] args)
{
int a = 1;
double d = 9.9;
char c = 'A';
// 编译器会将a、d和c自动转化为各自String临时表示,而不是加在一起
System.out.println("The result:" + a + d + c);
// The result:19.9A
// 若要实现对a、d和c的求和操作,可以将这三项括起来
System.out.println("The result:" + (a + d + c));
// The result:75.9
}
}
然而,注意一下下面的结果。
public class Main
{
public static void main(String[] args)
{
int a = 1;
int b = 2;
System.out.println(a+b); // 3
System.out.println((a+b)); // 3
System.out.println(a+""+b); // 12
}
}
小程序:三角形
import java.awt.*;
import java.applet.Applet;
public class Main extends Applet
{
public void paint(Graphics g)
{
int n = 4;
int xpos = 0, ypos = 20; // why...
for (int row = 1; row <= n; ++row)
{
xpos = 0;
for (int cal = 1; cal <= n - row; ++cal)
{
g.drawString(" ", xpos, ypos);
xpos += 20;
}
// System.out.println(xpos);
for (int cal = 1; cal <= 2*row - 1; ++cal)
{
g.drawString("*", xpos, ypos);
xpos += 20;
}
System.out.println(xpos);
ypos += 30;
}
}
}
赏
哈哈
|´・ω・)ノ,优秀
太傅
@哈哈 巨巨太强了!
zzzzzyyyyzzz
棒棒棒
太傅
@zzzzzyyyyzzz 谢谢!@[笑眼]
RYAN0UP
用Java做界面开发真的很操蛋。
太傅
@RYAN0UP @[doge1] 话说JAVA入门阶段有没有什么好玩的东西呀
RYAN0UP
@太傅 贪吃蛇,2048 @[绿帽]
太傅
吐槽一下JAVA小程序,不好玩 @[二哈]