《与Java相恋》系列为原创教程,转载须注明!
Java是一门面向对象的语言,与C++相比,Java有着它得天独厚的优势。首先,Java去掉了C++里面易出错的指针内容;其次,Java综合了C++等面向对象语言的优点,被大量企业所使用;最后,Java在网络开发中几乎处于垄断地位,不可动摇。
本教程专门针对Java初级学者编写,且要求拥有一定的程序设计基础。本教程仅用于学习交流,禁止任何组织或个人用于商业目的,一旦发现,将依法追究其责任。教程中存在的错误或者不足,欢迎大家指正。
现在,我们开始Java的学习。
我们来看看第一个Java的“Hello world”程序。
public class HelloWorld1_1
{
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
运行的结果为:Hello World
这里,对于刚接触Java的同学,不要去纠结为什么输出语句要写成System.out.println("Hello World");,这就好比刚学C语言的时候,总会有同学去问老师,为什么要在开头加#include语句,为什么输出语句是printf()。一开始,老师也不知道如何回答,所以大家这里就记住这样的格式就是了。
在Java程序中,必须有一个主类,也就是包含main()函数的类,而且文件名的前缀必须与主类的类名相同,主类应该加权限修饰符号public,如public class HelloWorld1_1
。在与主类同一个文件里需要添加其它类时,不得在添加的类前加权限修饰符,如需添加权限修饰符public,应该为添加的类另外新建一个文件。main()方法必须要声明为public static类型,传递的参数为String args[],由于主函数添加了static修饰符,所以只能够访问类外的静态变量和方法。
被static修饰的方法只能访问静态变量,然而普通方法可以访问静态变量,这是因为被static修饰的方法不再被类所拥有。有关static关键字的内容,后续课程会进一步讲到。
对于Java中数据类型、循环语句之类的基础内容,由于这些跟C语言或者其它语言都差不多,所以在本教程中一带而过。如果对于这些基础还有模糊的地方,可以再参照其它资料。
现在,我们用java程序来实现一个算法,就是大家所熟悉的从1加到100的算法,里面会用到循环的知识,给大家温习一下基础知识。
public class Sum1_2
{
static int sum;
/**
* @param args
*/
public Sum1_2()
{
sum=0;
}
public static void main(String[] args)
{
for(int i=1;i<=100;i++)
{
sum+=i;
}
System.out.println(sum);
}
}
运行结果为:5050
在这个例子中,我们申明了一个static变量sum,被static所修饰的变量被整个类所拥有(注意:这样的变量被类的所有对象所拥有,也就是说,所有的对象对这个类所做的更改都将被保存)。程序里用到了一个for循环,那么大家想想,还有没有其它的方法呢?这里,再给出一种循环方法如下:
public class Sum1_3
{
static int sum;
/**
* @param args
*/
public static void main(String[] args)
{
int i=1;
while(i<=100)
{
sum+=i;
i++;
}
System.out.println(sum);
}
public Sum1_3()
{
sum=0;
}
}
这种方法也可以得出正确的结果,我们还可以通过递归的方法来实现这个算法,程序如下:
public class Sum1_4
{
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println(Sum(100));
}
public static int Sum(int x)
{
if(x<=0)
{
return 0;
}
return x+Sum(x-1);
}
}
不过,不推荐大家用递归算法,递归算法开销较大,这里就不过多考虑了。同学们可以考虑有没有更优化的算法?给一点提示,我们可以发现1+100=101,2+99=101...那么,我们就可以设计出更简单的算法了,这里大家下去试着做一下,在下一节会给出详细答案。