1.类中定义的方法需要在main()中调用才能生效,例如publicclassDog{publicstaticvoidmakeNoise(){System.out.println("bark");}}这是Dog.java,有一个方法makeNoise(),然后我们可以在DogLauncher.java文件中调用它,代码是publicclassDogLauncher{publicstaticvoidmain(String[]args){Dog.制造吵闹声();}}值得注意的是,使用命令行执行时,Dog.java和DogLauncher.java都需要用javac编译后才能运行。这是一个陷阱。一开始我只javacDogLauncher.java,会报错2.实例化类假设我们为Dog类定义了一个变量weight来表示狗的好坏,publicintweight那么当我们在DogLauncher类中调用它的时候,我们可以使用关键字new,即Dogd;d=newDog();d.权重=20;这样就实例化了一个类,也就是这里的d3.class的构造函数相当于c++,需要一个和类名同名的函数作为构造函数,这样在初始化类实例的时候,可以到构造函数中传参,格式为constructor:publicclassname(typevariable){}ExamplepublicclassDog{publicintweight;公共狗(intw){重量=w;当我们在main()中传递参数时,会将w赋值给权重,因此在main()中调用Dogd;d=newdog(20);这样,weight被初始化为20,当Dog()被实例化为d时,我们调用它的makeNoise()方法有确切的调用,使用d.makeNoise()而不是使用类名:Dog.makeNoise().3.数组实例化,对象数组ts对象数组,类似于int[]、String[],我们也可以声明Dog[],表示Dog类类型的数组publicclassDogArrayDemo{publicstaticvoidmain(String[]args){Dog[]dogs=新狗[2];狗[0]=新狗(8);狗[1]=新狗(20);狗[0].makeNoise();}}我们两次使用关键字new,第一次是为数组newDog[2]开辟空间,第二次是为数组元素dogs[0]=newDog(8)、表示实例化对象数组,传参给weight=8小练习https://cscircles.cemc.uwater...4.静态方法与实例方法(非静态方法)的比较与区别1:静态方法不针对特定实例,任何调用它的实例都有相同的结果,例如:publicclassDog{publicintweightInPounds;publicstaticStringbinomen="Canisfamiliaris";...}我们给Dog类定义一个学名,叫Canisfamiliaris,那么不管是System.out.println(Dog.binomen)还是Dogd1=newDog();System.out.println(d1.binomen)或Dogd2=newDog();System.out.println(d2.binomen);最后的结果是狗的学名是Canisfamiliaris据说静态方法不是针对特定的狗,但是所有的狗都是这个区别的结果2:非静态方法的访问是使用实例名,静态方法的访问是使用类名。在上面的区别1中,我们使用d1.binomen其实是错误的。虽然可以运行,但实际上是不允许使用实例名来调用静态方法的。示例调用:静态方法:使用类名访问:publicstaticDogmaxDog(Dogd1,Dogd2){if(d1.weight>d2.weight){returnd1;}returnd2;}这是在Dog类方法中定义的静态,我们在main()中调用它:Dogd=newDog(15);Dogd2=newDog(100);Dog.maxDog(d,d2);请注意,在调用maxDog时,Dog使用.maxDog()非静态方法访问:publicDogmaxDog(Dogd2){if(this.weight>d2.weight){returnthis;}returnd2;}这个时候没有关键字static,上面我们使用关键字this来引用当前对象。例如,可以使用以下命令调用此方法:Dogd=newDog(15);Dogd2=newDog(100);d.maxDog(d2);请注意,maxDog()是使用实例名称d调用的。maxDog()命令行参数考虑publicstaticvoidmain(String[]agrs)各个字段的含义public:到目前为止几乎所有的方法都会加上这个前缀static:表示静态方法,不针对任何特定的实例void:返回值类型,不返回任何值main:functionnameString[]args:arrayoftypeString,arraynamedargs那么如果我们打印args数组的第一项,我们会得到什么?System.out.println(args[0]);答案是错误数组越界,因为我们没有传递任何参数。正确的使用方法是在解释器阶段传递参数javachellow.javajavahellow123我们传递的参数是“123”字符串,所以args[0]是1使用library关于Java的一些库:1.oracle:2.普林斯顿大学:http://introcs.cs.princeton.e...一些关键观察和术语:Java中的对象是任何类的实例。Dog类有自己的变量,也称为实例变量或非静态变量。这些必须在类内部声明,不像Python或Matlab等语言,可以在运行时添加新变量。我们在Dog类中创建的方法没有static关键字。我们称此类方法为实例方法或非静态方法。要调用makeNoise方法,我们必须首先使用new关键字实例化一只狗,然后发出特定的狗叫声。换句话说,我们调用了d.makeNoise()而不是Dog.makeNoise()。一旦一个对象被实例化,它就可以被分配给一个适当类型的声明变量,例如d=newDog();类的变量和方法也称为类的成员。类的成员使用点表示法访问。
