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...