关于java:cs61b-class2Intoduce-to-JavaObjects

11次阅读

共计 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…

正文完
 0