标签:
| 文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
|---|---|---|---|---|---|---|
| V1.0 | 2016.02.29 | lutianfei | none |
在工具类中当把构造方法私有后,外界就不能再创建对象了,此时将所有方法设为静态后。可以根据静态方法的特点:通过类名来调用。
Eg:
/*我想要对数组进行操作在同一个文件夹下,类定义在两个文件中和定义在一个文件中其实一样的。*/class ArrayDemo {public static void main(String[] args) {//定义数组int[] arr = {28,55,37,46,19};//静态方法//printArray(arr);//非静态方法//ArrayDemo ad = new ArrayDemo();//ad.printArray(arr);//测试类的作用:创建其他类的对象,调用其他类的功能。//而我们现在的操作是跟数组相关的,所以,你应该把这些操作定义到数组操作类中//定义一个数组的操作类//有了数组操作类之后的调用//ArrayTool at = new ArrayTool();//at.printArray(arr);//方法改进为静态后,就可以直接通过类名调用ArrayTool.printArray(arr);}/*public static void printArray(int[] arr) {for(int x=0; x<arr.length; x++) {if(x == arr.length-1) {System.out.println(arr[x]);}else {System.out.print(arr[x]+", ");}}}*///假设该方法不是静态的/*public void printArray(int[] arr) {for(int x=0; x<arr.length; x++) {if(x == arr.length-1) {System.out.println(arr[x]);}else {System.out.print(arr[x]+", ");}}}*/}class ArrayTool {//把构造方法私有,外界就不能在创建对象了private ArrayTool(){}public static void printArray(int[] arr) {for(int x=0; x<arr.length; x++) {if(x == arr.length-1) {System.out.println(arr[x]);}else {System.out.print(arr[x]+", ");}}}}
制作帮助文档(API)
制作帮助文档出错:
public修饰。显示,找到索引,出现输入框导包) 注:java.lang包下的类不需要导入,其他的全部需要导入。
字段摘要构造方法摘要
方法摘要
/*Math:类包含用于执行基本数学运算的方法由于Math类在java.lang包下,所以不需要导包。特点:没有构造方法,因为它的成员全部是静态的。掌握一个方法:获取随机数public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。*/class MathDemo {public static void main(String[] args) {//获取一个随机数//double d = Math.random();//System.out.println(d);//需求:我要获取一个1-100之间的随机数,肿么办?for(int x=0; x<100; x++) {int number = (int)(Math.random()*100)+1;System.out.println(number);}}}
局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。局部代码块
构造代码块
构造方法前执行。
静态代码块
eg1 :
class Code {static { //静态代码块int a = 1000;System.out.println(a);}//构造代码块{int x = 100;System.out.println(x);}//构造方法public Code(){System.out.println("code");}//构造方法public Code(int a){System.out.println("code");}//构造代码块{int y = 200;System.out.println(y);}//静态代码块static {int b = 2000;System.out.println(b);}}class CodeDemo {public static void main(String[] args) {//局部代码块{int x = 10;System.out.println(x);}//找不到符号//System.out.println(x);{int y = 20;System.out.println(y);}System.out.println("---------------");Code c = new Code();System.out.println("---------------");Code c2 = new Code();System.out.println("---------------");Code c3 = new Code(1);}}/** 程序运行结果:1020---------------10002000100200code---------------100200code---------------100200code*/
class Student {static {System.out.println("Student 静态代码块");}{System.out.println("Student 构造代码块");}public Student() {System.out.println("Student 构造方法");}}class StudentDemo {static {System.out.println("林青霞都60了,我很伤心");}public static void main(String[] args) {System.out.println("我是main方法");Student s1 = new Student();Student s2 = new Student();}}/*写程序的执行结果。林青霞都60了,我很伤心我是main方法Student 静态代码块Student 构造代码块Student 构造方法Student 构造代码块Student 构造方法*/
class 子类名 extends 父类名 {} **父类,基类或者超类;这多个类可以称为子类或者派生类。
class Dad(){}class Son extends Dad {}
让类与类之间产生了关系,是多态的前提
开发的原则:低耦合,高内聚
耦合:类与类的关系。内聚:就是自己完成某件事情的能力。super关键字去访问父类构造方法。不要为了部分功能而去继承
Eg1:
class Father {private int num = 10;public int num2 = 20;//私有方法,子类不能继承private void method() {System.out.println(num);System.out.println(num2);}public void show() {System.out.println(num);System.out.println(num2);}}class Son extends Father {public void function() {//num可以在Father中访问private//System.out.println(num); //子类不能继承父类的私有成员变量System.out.println(num2);}}class ExtendsDemo3 {public static void main(String[] args) {// 创建对象Son s = new Son();//s.method(); //子类不能继承父类的私有成员方法s.show();s.function();}}
this代表本类对应的引用。super代表父类存储空间的标识(可以理解为父类引用)成员变量
构造方法(子父类的构造方法问题讲)
成员方法(子父类的成员方法问题讲)
class Father {int age;public Father() {System.out.println("Father的无参构造方法");}public Father(String name) {System.out.println("Father的带参构造方法");}}class Son extends Father {public Son() {//super();//默认都会有的System.out.println("Son的无参构造方法");}public Son(String name) {//super();//默认都会有的System.out.println("Son的带参构造方法");}}class ExtendsDemo6 {public static void main(String[] args) {//创建对象Son s = new Son();System.out.println("------------");Son s2 = new Son("林青霞");}}

super关键字去显示的调用父类的带参构造方法。注:super(…)必须放在第一条语句上,否则就可能出现对父类的数据进行了多次初始化,所以必须放在第一条语句上面。
一个类的初始化过程
成员变量进行初始化默认初始化显示初始化构造方法初始化 A:一个类的静态代码块,构造代码块,构造方法的执行流程
/*看程序写结果:A:成员变量 就近原则B:this和super的问题this访问本类的成员super访问父类的成员C:子类构造方法执行前默认先执行父类的无参构造方法D:一个类的初始化过程成员变量进行初始化默认初始化显示初始化构造方法初始化结果:fuzi302010*/class Fu{public int num = 10;public Fu(){System.out.println("fu");}}class Zi extends Fu{public int num = 20;public Zi(){System.out.println("zi");}public void show(){int num = 30;System.out.println(num); //30System.out.println(this.num); //20System.out.println(super.num); //10}}class ExtendsTest {public static void main(String[] args) {Zi z = new Zi();z.show();}}
/*看程序写结果:A:一个类的静态代码块,构造代码块,构造方法的执行流程静态代码块 > 构造代码块 > 构造方法B:静态的内容是**随着类的加载而加载**静态代码块的内容会优先执行C:子类初始化之前先会进行父类的初始化结果是:静态代码块Fu静态代码块Zi构造代码块Fu构造方法Fu构造代码块Zi构造方法Zi*/class Fu {static {System.out.println("静态代码块Fu");}{System.out.println("构造代码块Fu");}public Fu() {System.out.println("构造方法Fu");}}class Zi extends Fu {static {System.out.println("静态代码块Zi");}{System.out.println("构造代码块Zi");}public Zi() {System.out.println("构造方法Zi");}}class ExtendsTest2 {public static void main(String[] args) {Zi z = new Zi();}}
/*看程序写结果:A:成员变量的问题int x = 10; //成员变量是基本类型Student s = new Student(); //成员变量是引用类型B:一个类的初始化过程成员变量的初始化默认初始化显示初始化构造方法初始化C:子父类的初始化(分层初始化)先进行父类初始化,然后进行子类初始化。结果:YXYZ问题:虽然子类中构造方法默认有一个super()初始化的时候,不是按照那个顺序进行的。而是按照分层初始化进行的。它仅仅表示要先初始化父类数据,再初始化子类数据。*/class X {Y b = new Y();X() {System.out.print("X");}}class Y {Y() {System.out.print("Y");}}public class Z extends X {Y y = new Y();Z() {//superSystem.out.print("Z");}public static void main(String[] args) {new Z();}}
方法覆盖,方法复写。
class Phone {public void call(String name) {System.out.println("给"+name+"打电话");}}class NewPhone extends Phone {public void call(String name) {//System.out.println("给"+name+"打电话");super.call(name);System.out.println("可以听天气预报了");}}class ExtendsDemo9 {public static void main(String[] args) {NewPhone np = new NewPhone();np.call("林青霞");}}
Eg1:方法重写和方法重载的区别?方法重载能改变返回值类型吗?
方法重写(Override):
方法重载(Overload):
Eg2: this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。
this:代表当前类的对象引用super:代表父类存储空间的标识。(可以理解为父类的引用,通过这个东西可以访问父类的成员)Eg3:
//定义人类class Person {//姓名private String name;//年龄private int age;public Person() {}public Person(String name,int age) { //"林青霞",27this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}//定义学生类class Student extends Person {public Student() {}public Student(String name,int age) { //"林青霞",27//this.name = name;//this.age = age;super(name,age);}}//定义老师类class Teacher extends Person {}class ExtendsTest4 {public static void main(String[] args) {//创建学生对象并测试//方式1Student s1 = new Student();s1.setName("林青霞");s1.setAge(27);System.out.println(s1.getName()+"---"+s1.getAge());//方式2Student s2 = new Student("林青霞",27);System.out.println(s2.getName()+"---"+s2.getAge());//补齐老师类中的代码并进行测试。}}
标签:
原文地址:http://www.cnblogs.com/lutianfei/p/5229121.html