day_14继续关于类的专题研究

星期日, 十一月 15, 2015 15:32:26

 

三、再谈方法

 

----3.1方法的参数与返回值

 

----3.2方法的重载

 

        方法名相同,参数的个数/类型不同

 

----3.3将数组传递到方法里

 

代码案例:

 

1~~ 

package day14;

 

/* 将数组作为参数传递到方法里:

 * 1.传递一维数组*/

public class ArrayTraTest {

public static void main(String[] args){

int ar1[] = {1,3,5,7};

largest(ar1);

}

 

private static void largest(int[] ar1) {

int max = ar1[0];

for(int i= 0;i<ar1.length;i++) {

if(max < ar1[i]){

max = ar1[i];

}

}

System.out.print("max="+max);

 

}

}

 

运行结果:

 

max=7

 

2~~

代码案例:

 package day14;

 

/* 将数组作为参数传递到方法里:

 * 2.传递二维数组*/

public class ArrayTraTest {

public static void main(String[] args){

int ar2[][] ={{2,4,6,8}, {1,3,5,7}};

priE(ar2);

}

 

private static void priE(int[][] ar2) {

for(int i= 0;i<ar2.length;i++) {

for(int j = 0;j<ar2[i].length;j++) {

System.out.print(ar2[i][j]+10+"\t");

}

System.out.print("\n");

}

}

}

 

 

运行结果:

12 14 16 18

11 13 15 17

 

3.~~返回数组的方法

代码案例:

 package day14;

 

/* 返回数组的方法:

 * 在方法前加上返回数组的类型*/

public class ArrayTraTest {

public static void main(String[] args){

int ar2[][] ={{2,4,6,8}, {1,3,5,7}};

int arr21[][] = new int[2][4];

arr21 = priE(ar2);

for(int i =0;i<arr21.length;i++) {

for (int j=0;j<arr21[i].length;j++) {

System.out.print(arr21[i][i]+"\t");

}

System.out.print("\n");

}

}

 

private static int[][] priE(int[][] ar2) {

for(int i= 0;i<ar2.length;i++) {

for(int j = 0;j<ar2[i].length;j++) {

ar2[i][j] +=ar2[i][j]+10;

}

}

return ar2;

}

}

 

运行结果:

12 14 16 18

11 13 15 17

 

 

四:引用数据类型的传递

 

1~~

代码案例

 package day14;

 

/* 引用数据类型的传递*/

public class QuoteTest {

public static void main(String[] args){

Person p1 = new Person();

Person p2 = null;

p1.name = "lala";

p1.age = 18;

p2 = p1;

System.out.print("name= "+p2.name+"  age="+p2.age);

p1 = null;

}

}

 

class Person {

String name;

int age;

}

 

 

运行结果:

name= lala  age=18

 

 

五.引用Object类中的equals方法

 

代码案例:

 package day14;

 

public class ObjectEqualsTest {

public static void main(String[] args){

Person p1 = new Person("haha",22);

Person p2 = new Person("haha",22);

System.out.print((p1.equals(p2)?"是同一个人":"不是同一个人"));

}

}

 

class Person {

String name;

int age;

 

public Person(String name,int age) {

this.name = name;

this.age = age;

}

 

/* 覆盖Object中的equals方法*/

public boolean equals(Object o){

boolean temp = true;

Person p1 = this;

// 判断Object对象是否是Person对象

if(o instanceof Person) {

//如果是Person类实例,则向下转型

Person p2 = (Person)o;

/*调用String类中的equals方法*/

if(!((p1.name).equals(p2.name)&&((p1.age)==(p2.age)))) {

temp = false;

}

}

else {

temp = false;

}

return temp;

 

}

}

运行结果:

是同一个人

 

 

五.接口对象的实例化



      接口是无法直接实例化的,因为接口中没有构造方法。

但是却可以根据对象多态性的概念,通过接口的子类对其进行实例化。

 

从程序中可以看到,使用接口实际上就是定义出了一个统一的标准。

 

5.1

代码案例

package day14;

 

public class InterfaceTest {

public static void main (String[] args) {

Person p = new Person();

p.fun1();

}

}

/*可以根据对象多态性的概念,通过接口的子类对其进行实例化*/

interface A {

public void fun1();

}

 

class Person implements A {

 

@Override

public void fun1() {

System.out.print("A fun1()");

}

 

}

 

 

运行结果:

A fun1()

 

 

5.2接口定义统一的标准 

 

代码案例2

 

package day14;

 

public class InterfaceTest2 {

public static void main (String[] args) {

(new Computer()).work(new MoveDisk());

new Computer().work(new MP3());

}

}

/*可以根据对象多态性的概念,通过接口的子类对其进行实例化

 * 使用接口实际上就是定义出了一个统一的标准*/

interface USB {

public void start();

public void stop();

}

/*不同的设备实现覆写接口的方法*/

class MoveDisk implements USB {

 

@Override

public void start() {

System.out.print("MoveDisk start()"+"\t");

 

}

 

@Override

public void stop() {

System.out.println("MoveDisk stop()");

 

}

 

}

 

class MP3 implements USB {

 

@Override

public void start() {

System.out.print("MP3 start()"+"\t");

 

}

 

@Override

public void stop() {

System.out.print("MP3 stop()");

 

}

 

}

 

class Computer  {

public void work (USB u) {

u.start();

u.stop();

}

}

 

运行结果:

MoveDisk start() MoveDisk stop()

MP3 start() MP3 stop()

 

 

六、this关键字

 

----6.1 当前的对象

 

       构造方法是在实例化一个对象时被自动调用的=在类中所有方法里,只有构造方法是被优先调用的,

所以使用this调用构造方法必须也只能放在类中。

 

----6.2 如果程序中想用某一个构造方法调用另一个构造方法,也可以用this来实现。

 

代码案例:

package day14;

 

public class ThisTest {

public static void main(String[] args) {

Person p = new Person("yuzhou",23);

}

}

/*某一个构造方法调用另一个构造方法*/

class Person {

String name;

int age;

public Person() {

System.out.println("无参Person()");

}

 

public Person(String name,int age) {

   this(); //调用无参构造方法

   this.name = name;

   this.age = age;

System.out.print("参person (String name,int age)"+"\t"+name+"\t"+age);

}

}

运行结果:

无参Person()

参person (String name,int age) yuzhou 23

 

六、static关键字

 

----6.1声明静态变量

 

说明用static声明的属性是所有对象共享的。

也可以用类名直接访问。

例如Person.city = “。。。”;

也称为:类变量

 

----6.2静态方法

 

注意:

如果在类中声明一个static类型的属性,

1.则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。

2.但若要用static类型的方法调用非static类型的属性,就会出现错误。

 

----6.3理解main()方法

 

1.访问权限为public----java虚拟机需要调用类中的main()方法 公共方法

2.方法必须是static的----java虚拟机在执行main()时不必创建对象   静态方法,可以由类名直接调用

 

 

----6.4静态代码块

 

6.4.1基础概念

 

        一个类可以使用不包含在任何方法中的静态代码块,当类被载入时,静态代码块被执行,且执行一次。

静态代码块经常用来进行类属性的初始化。

 

 

     产生了两个匿名对象,而静态代码块只执行了一次,而且静态代码块优先于静态方法,

--->静态代码块可以对静态属性初始化。

 

6.4.2代码案例:

package day14;

 

public class StaticTest {

/*运行本程序,此段代码会自动被执行*/

static {

System.out.println("3.StaticTest...static");

}

public static void main(String[] args) {

System.out.println("4.public static void main(String[] args)");

/*产生了两个匿名对象,而静态代码块只执行了一次,而且静态代码块优先于静态方法,

--->静态代码块可以对静态属性初始化。*/

new Person();

new Person();

}

}

 

class Person {

public  Person() {

System.out.println("1.public void Person()");

}

/*此段代码首先被执行*/

static {

System.out.println("2.Person...static");

}

}

运行结果:

3.StaticTest...static

4.public static void main(String[] args)

2.Person...static

1.public void Person()

1.public void Person()

 

七.final关键字的使用

 

在Java中声明类、属性和方法时,可以使用final来修饰。

  1.final标记的类不能被继承

  2.final标记的方法不能被子类覆写

  3.final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。

 

八、interface关键字的使用

 

----8.1基本概念

 

interface判断一个类是否实现了某个接口,

判断一个实例对象是否属于一个类。

 

----8.2格式:

  对象 interface类(或接口)

 

 

星期日, 十一月 15, 2015  18:42:39

你可能感兴趣的:(this关键字,静态代码块,static关键字,接口对象的实例化,interface关键字的使用)