1、 从hello world开始的Java—jdk编译,第一个Java程序
2、 IDE—eclipse建立工程和几个小技巧
3、 Java Structure – Java程序的结构 举例
4、 对象—创建对象和调用对象
从hello world开始的Java
首先要有Java的编译器,也就是Javajdk,并且得把相应的路径配置好(这个问题非常多的博客解释的比较清楚,这里不赘述)
在没有IDE的环境下也可以编写并运行简单的Java程序
打开记事本,写上
public class HelloWorldApp {
public static void main(String[] args){
System.out.println("HelloWorld!"); //Display the string.
}
}
注意的是,这个记事本的名字必须和这个类的名字一样,也就是HelloWorldApp,大小写都得完全一样,否则是报错的, 并且保存成HelloWorldApp.java的格式,而不是原来的.txt
然后打开命令行(cmd)
输入javac HelloWorldApp.java 进行编译,会生成一个.class文件
然后接着输入 java HelloWorldApp 来运行这个生成的.claa文件注意不加后缀的
然后就会在命令行发现多了一行 Hello World了表示运行成功
注意的是,要放在合适的位置,不然要调整到你那个记事本的文件夹下才行,我因为懒直接把HelloWorldApp保存在了Administrator 里……
IDE
不多说 eclipse的大名应该是听过的吧……
如果发现下载的奇慢或者总是下载不完整就结束下载了,那推荐自己找梯子去……
注意版本要下的跟自己的jdk一致才行,比如都是32位或者64位,不然就比较尴尬
一般第一次的页面里会有一个选项是CreanteHelloWorldApplication, 跟着她的操作一步步来就可以很快熟悉如何建立一个Java工程了
然后就可以在建一个,把下面给出的student类写一写试一下了
另外分享一点跟eclipse有关的小干货:
--换字体的话,Windows-> Prefernces->直接搜索font 然后在Basic里会有最后一个Textfont,然后 edit就可以了
--Windows-> perspective 里面有Reset可以一件恢复到原始的视图,我比较喜欢project的视图在左边而不是上边,直接拖边框就可以了,如果显示不让移动的小红圈,说明你想移动的终点位置不是很合法……
--还有 快速复制一行的 把光标停在一行 Ctrl+Alt+down可以在下面快速复制一行, Ctrl+Alt+Up可以在上面快速复制一行
-- 把光标停在某一个变量处按 Ctrl+1会出现很多选项,比如里面有很实用的自动生成get set函数~
Java Structure
package 所谓的Java包 0个或者1个 在程序最前面
import 在所有的类前面 有点类似c++的include
public class definition 0个或一个 唯一的公共类,名字要和文件名一样,可以放main函数的
name class definition 0 或多个 普通类 不能放main的那种
interface definition 接口 可以有0个或者多个
• Example:
• package project.gui.view;
• import java.util.Calendar;
• import java.awt.*;
• import java awt.event.*;
• import mywork.form;
• public classButtonExample{…}
• class A{…}
• class B{…} ……
• interface ButtonInterface{…} ……
Java一般有两种类,一种是定义类的(Program class);另一种是测试类(runner clas),一般包含main函数
注意 一个源程序中可以声明多个类,但是只能有一个公共类,这个类里才可以有main函数
具体到一个program class里面的结构,就跟C++非常像了。
Public class classname
{
声明常量和变量
构造函数
函数方法
}
如果是runner class,只不过里面是main函数
插一个例子:
//一个 program class
public classStudent {
public Stringname;
public char sex;
public Stringbirthday;
private int compScore,engScore;
public Student(Stringstr1,charch,String str2){
name=str1;
sex=ch;
birthday=str2;
}
public void setCompScore(intdata){
compScore=data;
}
public int getCompScore(){
return compScore;
}
public int getEngScore() {
return engScore;
}
public void setEngScore(intengScore) {
this.engScore =engScore;
}
public String toString()
{
return "Name "+name+";Sex "+sex+";Birthday "+birthday;
}
}
//注意Java输出的时候可以用+ 表示连接两个输出
一个runner class
import java.awt.*;
public class TestStudent{
public static void main(String args[]){
Student stu1=new Student("Mary",'M',"1990.8.8");
System.out.println(stu1.toString());
stu1.birthday="1990.7.9";
System.out.println(stu1.toString());
stu1.setCompScore(98);
stu1.setEngScore(82);
System.out.println("计算机成绩:"+stu1.getCompScore());
System.out.println("英语成绩:"+stu1.getEngScore());
System.out.println("平均成绩:"+stu1.getAverScore());
System.out.println("单科最高分:"+stu1.getMaxScore());
}
}
//将这两个类放在同一个project里面,如果是用的 eclipse的话,就可以run as application、、//来看结果了
Java创建对象
其实已经可以从上面的代码中发现,跟c++是几乎一样的,在Student stu1 = new Student(“”,””,””)的过程中,调用了Student类里面的构造函数; 这里想多说的是,如果原来没有自己定义构造函数的话,系统会有默认的无参数的构造函数,不过一旦声明了,就不在自动生成了,所以其实还是显式的写出默认构造函数的好,以防报错
关于对象的调用
可以从上面的例子里看到,跟C++非常像的,也是用‘.’来调用里面的公共的变量和方法,C++是可以有->的,但是Java没有指针,所以只会是’.’,但其实这是引用
Java语法
这个在我转自一个知乎回答里,非常详细的说了java和C++语法的不同相同之处
其中比较需要注意的是java里的局部变量必须初始化; String是个类,得大写别忘了;Array的用法,[]可以放前面 ; 还有bool -> Boolean
想说一下变量和范围的问题,Instance variable也就是类里面一开始的一些成员变量,这些是可以自动初始化的,但是局部变量必须显式的初始化之后才行,不然报错;然后同一个范围内也是不能同一个变量名声明两遍的,比如
{Int I = 1;
{int I = 2}
}这样是不行的
然后在重点说一下数组的问题:
Int [] A = {1,2,3};
int A[]= {1,2,3};
int[]A = new int[3];A[0]=1;A[1]=2;A[2]=3;
这三种都是可以的,而且前面这个[]是不能有数字的。简单数据类型的数组基本就是这样,也可以声明复合类型的变量,没什么很大的区别。比如前面的Student类:
Student[] stu = newStudent[3];
Stu[0]=newStudent(“”,””,””);
Stu[1] = new Student()…
感觉跟二维的比较像。 同理 Student [] stu = {newStuden(…), new Student(…)};也是可以的
其实用new分配内存后,会自动初始化数组里所有的数据元素
二维数组的话:
Int [][] arr = new int[4][];
Arr[0] = new int[5];。。。 注意到[][]两个方括号,给出前面的数字的情况下才能给出后面的, int [][]arr =new int[][5]是不合法的; int arr[][] = new int[2][3];是可以的;还是一样的,等式左边这个[][]是都不能写的
有个与c++不一样的是, 数组里有专门的Length可以给出数组的长度
Int [][] b = new [3]; b[1] = new int[2];
b.length==3 b[1].length = 2;
还值得一提的是一种简便的遍历数组的方法:
public staticvoidmain(String[] args){
// TODO Auto-generated method stub
int [] list = new int[5];
for(inti = 0; i<list.length;i++)
list[i] =i+2;
for(intelement:list)
System.out.println(element);
}
加黄的部分,element不是关键词,可以换成别的, 格式就是type name: array_name,这样就可以迭代了
不能随便的resize一个数组的,不过可以这样:
Int []b = new int[6];
B = new int[10];
还有一个System.arraycopy()将一个数组复制到另一个数组
举个栗子:
public staticvoidmain(String[] args){
int elements[ ] = { 1, 2, 3, 4, 5, 6};
// 增大后的新数组
int hold[ ] = {10, 9, 8, 7, 6,5, 4, 3, 2, 1 };
// 把elements数组中的所有元素复制到
// hold数组中,下标从0开始
System.arraycopy(elements, 0,hold, 0, elements.length);
for(inti=0;i<elements.length;i++)
System.out.println
("elements["+i+"]="+elements[i]);
for(inti=0;i<hold.length;i++)
System.out.println("hold["+i+"]="+hold[i]);
}
输出为:
elements[0]=1
elements[1]=2
elements[2]=3
elements[3]=4
elements[4]=5
elements[5]=6
hold[0]=1
hold[1]=2
hold[2]=3
hold[3]=4
hold[4]=5
hold[5]=6
hold[6]=4
hold[7]=3
hold[8]=2
hold[9]=1
System.arraycopy(elements, 0, hold, 0, elements.length);这句中第一个0不能改否则不能编译,表示从elements的第0个开始复制,第二个0可以改,表示从hold里第几个开始改变,最后一个也可以改,表示复制几个元素,注意到跟c++里面stirng的复制不太一样,会覆盖掉之前的