首页 > 学院 > 开发设计 > 正文

Java基础--面向对象2

2019-11-14 11:15:15
字体:
来源:转载
供稿:网友

1.方法的重载(Overload)

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。

例如:

void info(){    System.out.PRintln("My id is "+ id);}void info (String t){    System.out.println(t+" "+id+" "+age);}构造方法也可以构成重载,例如:

Person(){    id = 0;    age = 20;}Person(int i){    id = 0;    age = i;}Person(int n,int i){    id = n;    age = i;}  

2.this关键字

this:当一个对象创建后,java会给这个对象分配一个引用自身的指针,这个指针的名字就是this,只能在类中的非静态方法中使用,方法中的某个形参名与当前对象某个成员有相同的名字,这时为了不至于混淆,你便需要明确是那个this关键字指明使用的成员。

(1).在类的方法定义中使用的this关键字代表使用该方法的对象的引用

(2).当必须指出当前使用方法的对象是谁时要使用this

(3).有时使用this可以处理方法中成员变量和参数重名的情况

(4).this可以看作是一个变量,它的值是当前对象的引用

(5).this所在的大框框为heap堆内存里的new出来的一个对象

例如:

public class Leaf {    int i = 0;    Leaf(int i) {this.i = i;}    Leaf increament(){        i++;        return this;    }    void print(){        System.out.println("i ="+i);    }    public static void main(String[] args){        Leaf leaf =new Leaf(100);        leaf.increament().increament().print();    }}结果是:i=102

 3.static关键字

1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。

2.用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,即是没有对象一样可以用(Cat.静态的方法,不用写对象的名字),所以在static方法中不可以访问非static的成员。因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

3.main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[]args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();然后才能调用test.main();而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。

4.静态方法不再是针对某个对象调用,所以不能直接访问非静态成员。如果想访问必须new个对象出来

5.可以通过对象引用或类名(不需要实例化)访问静态成员。main方法在执行时不需要new一个对象出来。

类名 . static变量名

类名 . static方法名

public class Cat {    private static int sid = 0;    private String name;    int id;    Cat(String name) {        this.name = name;        id = sid++;    }    public void info() {        System.out.println("My name is " + name + " No." + id);    }    public static void main(String arg[]) {        Cat.sid = 100;        Cat mimi = new Cat("mimi");        mimi.sid = 2000;        Cat pipi = new Cat("pipi");        mimi.info();        pipi.info();    }}

结果为:

My name is mimi No.100

My name is pipi No.2000

如果去掉sid的static和Cat.sia = 100;

那么运行结果是:

My name is mimi No.0My name is pipiNo.0        

此时sid在两个new出来的对象里都有值,均为1,每次创建对象是,sid都会被重新赋值为0。

 4.package和import语句

为便于管理大型软件系统中数目众多的类,解决类的名字冲突问题,Java引入(package)机制,提供类的多重类命名空间。

package pakg1[.pakg2[.pakg3…]];   一般为公司的域名反过来写成package com. … .  …;

package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。

Java编译器把包对应于文件系统的目录管理,package语句中,用“ .”来指明包的层次

例如:packagecom.sxt;   则该文件中所有的类位于./com/sxt目录下

  如果将一个类打包,则使用该类时必须使用该类的全名,例如com.sxt.Myclass,Java编译器才能找到该类。

也可以使用import在文件的开头引入要使用到的类。

例如import com.sxt.Myclass;  //可以引用Myclass类

importcom.sxt.*;                      //sxt下的类都能引用

importjava.util;                        //引入Java.util包中的所有类

可以不需要用import语句直接使用java.lang包中的类。

必须class文件的最上层包的父目录位于classpath下,设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

 

J2SDK中主要的包介绍

java.lang包含一些Java语言的核心类,如String,Math,Integer(整数),System和Thread(线程)

java.awt包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形化用户界面

java.net包含执行与网络相关的操作的类

java.io包含能提供多种输入输出功能的类

java.util包含一些实用工具类,如定义系统特性,使用与日期日历相关的函数

5.类的继承

Java中使用extends关键字实现类的继承机制,其语法规则为:

class [extends ]{……}

通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)

Java只支持单继承,不允许多继承:一个之类只能有有一个基类,一个基类可以派生出多个子类

public class Person {    private String name;    private int age;    public void setName(String name) {        this.name = name;    }    public void setAge(int age){        this.age = age;    }    public String getName(){        return name;    }    public int getAge(){        return age;    }}
public class Student extends Person{    private String school;    public void setSchool(String school){        this.school = school;    }    public String getSchool(){        return school;    }}
public class Test {    public static void main(String agrs[]){        Student student = new Student();        student.setAge(20);        student.setName("coco");        student.setSchool("henan");        System.out.println(student.getAge());        System.out.println(student.getName());        System.out.println(student.getSchool());    }}结果为:

20cocohenan

6.权限修饰符

Java权限修饰符public protected private置于类的成员之前,用来限定其他对象对该类对象成员的权限

对于class的权限修饰只可以用public和default。

public类可以在任意地方被访问,default类只可以被同一包内部的类访问。

继承中的权限控制:

一个类能够继承另一个类中private的成员,因为他会继承所有成员,但是它不能使用private成员


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表