1.class外面定义的method须要在main()外面调用才会失效,e.g.
public class Dog { public static void makeNoise(){ System.out.println("bark"); } }
这是Dog.java,外面有一个method,makeNoise(),而后咱们能够实现在DogLauncher.java文件中调用它,代码是
public class DogLauncher{ public static void main(String[] args){ Dog.makeNoise(); }}
值得注意的是,在应用命令行执行时,Dog.java和DogLauncher.java都须要用javac编译之后能力运行
这是踩坑点,最开始我只javac DogLauncher.java,会报错
2.实例化class
假如咱们给Dog类定义一个变量weight,用以示意狗的品质,public int weight
那么咱们在DogLauncher类外面调用时,能够应用关键字new,即
Dog d;d=new Dog();d.weight=20;
这样去实例化一个class,也就是这里的d
3.class的构造函数
相当于c++,须要一个与类名同名的函数作为构造函数,从而在初始化类实例时能够往构造函数外面传参,格局是
constructor:public classname(type variable){}
举例
public class Dog { public int weight; public Dog(int w){ weight=w; }}
当咱们在main()外面传参时,就会将w赋值给weight
因而在main()外面调用是
Dog d;d=new dog(20);
这样,weight被初始化为20,当Dog()被实例化为d之后,咱们调用其makeNoise()办法就有确切的调用了,应用d.makeNoise(),而不是应用类名:Dog.makeNoise().
3.Array Instantiation, Arrays of Objects
对象数组,与int[],String[]相似,咱们也能够申明Dog[],这示意是一个Dog class类型的数组
public class DogArrayDemo { public static void main(String[] args) { Dog[] dogs = new Dog[2]; dogs[0] = new Dog(8); dogs[1] = new Dog(20); dogs[0].makeNoise(); }}
咱们两次应用到了关键字new,
第一次是为数组开拓空间,new Dog[2],
第二次是为数组元素开拓class的空间。dogs[0]=new Dog(8),示意将对象数组实例化并传参给weight=8
4.静态方法与实例办法(非静态方法)的比拟
区别1:
static method不针对特定的实例,任何实例调用它都是一样的构造,例如:
public class Dog { public int weightInPounds; public static String binomen = "Canis familiaris"; ...}
咱们给Dog类定义一个学名,叫做Canis familiaris,那么无论是System.out.println(Dog.binomen)
还是
Dog d1=new Dog();System.out.println(d1.binomen)
或者
Dog d2=new Dog();System.out.println(d2.binomen);
最初的后果都是狗的学名是Canis familiaris
也就是说static method不针对特定的某某狗,而是所有狗都是这个后果
区别2:
non-static method的拜访是应用实例名,
static method的拜访是应用类名,
上述区别1中,咱们应用d1.binomen其实是谬误的,尽管能够运行,然而实际上不容许应用实例名去调用静态方法。
举例调用:
静态方法:应用类名拜访:
public static Dog maxDog(Dog d1, Dog d2) { if (d1.weight > d2.weight) { return d1; } return d2;}
这是定义在Dog类的static method,咱们在main()中去调用它:
Dog d = new Dog(15);Dog d2 = new Dog(100);Dog.maxDog(d, d2);
请留神,调用maxDog时,应用的是Dog.maxDog()
非静态方法的拜访:
public Dog maxDog(Dog d2) { if (this.weight > d2.weight) { return this; } return d2;}
此时没有关键字static,下面,咱们应用关键字this来援用以后对象。例如,能够应用以下命令调用此办法:
Dog d = new Dog(15);Dog d2 = new Dog(100);d.maxDog(d2);
请留神,此时调用maxDog()是用实例名d.maxDog()
命令行参数
考虑一下public static void main(String[] agrs)
各个字段的含意
public:到目前为止简直所有method都会加这个前缀
static:示意静态方法,不针对任何特定的实例
void:返回值类型,不返回任何值
main:函数名称
String[] args:String类型的数组,数组名为args
因而,如果咱们打印args数组的第一项,会失去什么?System.out.println(args[0]);
答案是,报错数组越界,因为咱们并未传递任何参数,正确的应用办法是,在解释器阶段传参
javac hellow.javajava hellow 1 2 3
咱们传递参数"1 2 3"字符串,所以args[0]就是1
应用库
一些对于Java的库:
1.oracle:
2.Princeton University:
http://introcs.cs.princeton.e...