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成员
新闻热点
疑难解答