星期日, 十一月 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