共计 2446 个字符,预计需要花费 7 分钟才能阅读完成。
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.java
java hellow 1 2 3
咱们传递参数 ”1 2 3″ 字符串,所以 args[0]就是 1
应用库
一些对于 Java 的库:
1.oracle:
2.Princeton University:
http://introcs.cs.princeton.e…