您的位置:首页 > 编程语言 > Java开发

java 面向对象学习

2015-01-17 00:31 169 查看
1.面向对象:

c语言是面向过程的语言,关心具体的函数实现,java不是不关心具体函数的实现,而是在这个基础上做了一个抽象(改进),首先认为所有的方法(行为)是属于某个对象.那么面向对象首先思考的是对象和对象之间的关系,当我们思考清楚过后,我们才考虑具体的代码逻辑,也就是我们常说的过程,面向对象首先关心的是对象是否有某种行为和属性,而最后在关心函数(行为的)实现.

2.类和对象

访问修饰符 class 类名{

//属性

//方法(函数,行为)

}

类:代表的是一个类型的数据,是一个抽象的概念,是不能直接使用的.要使用类的属性和方法,必须通过类的实例对象(实实在在的具体的某一个对象)

对象的创建: new关键字来完成的.

1)类的属性如果没有手动的初始化 最基本数据类型数据值0,引用类型null 包括字符串,也是null.

2)我们的类是抽象的 必须通过具体的实例对象来调用

3.构造函数:

1)JDK为我们提供创建对象的一个方法().

2)格式: 访问修饰符 类名(参数列表){

//具体的代码;

}

//这里的参数列表可以不需要,如果没有呢 我们叫做默认的构造函数,如果有参数列表,是叫做有参构造函数.

3)假如我们不写默认的构造函数,JDK会为我们提供一个默认的实现,当我们写了一个有参构造函数,那么默认的构造函数就不能被调用,我们必须手动的写一个默认的构造函数.

4)构造函数的重构

上面讨论的问题,其实就是构造函数的重构问题.

5)构造函数的调用,当我们调用默认构造函数或则有参构造函数的时候,只有一个构造函数被调用.

4.this指针

代表当前的对象(就是你目前调用的那个,谁去调用,谁就是当前对象)

package cn.ddy.java1.demo01;

public class Person {

private String name;

private int age;

public String getInfo() {

return name + "_" + age;

}

//当你写了带参数的构造函数时,必须再写一个默认的构造函数

//this 指针, 代表的是当前的对象

public Person(String name, int age) {

//System.out.println(name + age);

this.age = age;

this.name = name;

}

//默认的构造函数 不带参数的

public Person() {

}

public static void main(String[] args) {

Person per = new Person("ddy", 29);//创建了per对象后, per的name和age已经赋值了

System.out.println(per.getInfo());

}

}

**********************************************************************

public static String address = "love";

public static String getMsg(){

return "I love ";

}

System.out.println(Person.address);

String str = Person.getMsg();

System.out.println(str);

//继承 ,非私有的数据( 属性和方法)

//接口: 一个类实现接口通过implement 实现

//实现父类接口,必须在子类中实现父类的方法

public class Son implements IFather {

// Son 继承 Father

public void go() {

System.out.println("子类实现go方法");

}

@Override

public void out() {

// TODO Auto-generated method stub

System.out.println("子类实现out方法");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Son son = new Son();

// son.name = "sdf";

// son.age = 23;

son.out();

// System.out.println(son.age+son.name);

}

}

/*

* 接口: 接口不能有属性,更纯粹

* */

public interface IFather {

public void go();

public void out();

}

5.GC:

java为我们提供的垃圾回收机制,不需要手动去管理内存的时候.Person person=new Person(),person=null;GC帮我们清理掉内存中的对象.

Finalize():可以简单的理解成在垃圾回收(GC)清理对象前所调用的方法

System.gc()启动垃圾回收机制(GC),不一定能启动.我们可以简单的理解成报警,报警后,警察不一定来,怀疑你假报案.

6.参数传递方式:值传递.

C:值传递,地址传递

Java:值传递. 引用数据.Person person=new Person(), person是应用类型?是引用类型 但是不是地址

Person person:是句柄,可以简单的理解成new Person()这个对象的名字或则别名. C语言操作的是堆中Person这个实实在在的对象通过地址来找到person, java通过句柄(名字)而不是真的对象地址.

注意:虽然引用传递属于值传递,但是也可以改变句柄的值

小结:1)java对象时放在JVM的堆空间中,简单理解就是内存的一块区域

2)java引用是放在栈上的.

3)我们使用对象时通过引用来使用,我们并没有实际的操作堆中数据 比如 Person person=new Person();person=null;意思你就是不指向任何的对象,此 时我们是不能是用person对象的。因为引用已经指向null.等待垃圾回收没有指向的person对象.

7.static关键字

1)static可以修饰属性和方法修饰属性叫做静态的属性,修饰方法叫做静态方法

2)静态属性和方法可以直接用对象或者类名直接调用.

3)static直接修饰作用域叫做静态块

4)对于java类的加载方式来说,在类的加载过程中就已经存在静态的数据,也就是用static修饰的属性,方法,静态块,而对象只有在通过new 关键字创 建后才会存在.

5)实例方法和实例属性只有创建对象后才可以使用,那么在静态方法中使用实例的东西(属性,方法,this)是不能编译通过。在静态方法中可以创建对象.

8.Main函数

Main函数是java程序执行的入口

9.继承:

为模拟现实世界中,父子关系的一种对象之间的关系.java提 供了这种关系的一个抽象,这种描述的抽象叫做继承.

Extends关键字来实现继承

1).通过子类的对象访问父类的非私有数据(属性和方法)

10.抽象类

1)Abstract 关键字来定义一个类,这样的类叫做抽象类

2)通过abstract修饰方法,而没有方法体的方法我们叫做抽象方法.如果子类要实现抽象类,那么子类必须实现父类的抽象方法.

3)抽象类是不能用new关键字创造对象.

4)抽象函数中可以有实例的方法.抽象类中可以不要抽象方法,

但是这样和普通类一样,无意义.

11.接口:

Interface关键字类定义,接口比抽象类更加的纯粹,只有抽象的函数声明,没有具体的代码

1)接口中不能有属性

2)一个类实现接口通过implements关键字来实现.

3)一个类要实现父类接口,必须在子类中实现父类的方法

4)接口不能通过new 关键字来创建对象

12.多态性:

同一种行为表现出不同表现方式,往往呢通过继承和接口来实现.

Java面向对象有三大特性:1)封装性 2)多态性 3)继承性

Extends:

Implements:

Java的继承是单继承

Java实现接口可以实现多个.子类要实现所有接口的方法

重写:子类可以重新定义父类的行为方法的具体逻辑(实现)

多态性:1)可以重写来表现出不同的表现方式(统一行为).

2)动态绑定:a.可以通过父类的引用指向子类的对象

b .当子类实现了父类的方法,并且重写了此方法,那么父类的句柄(引用)调用此方法的时候,会调用子类的方法.假如没有重写父类的方法,会调用父类的方法.

小结:继承链:1)当创建子类对象的时候先去调用父类的构造函数,然后调用子类构造函数.

2)抽象类可以有构造函数,但是不能创建对象

3)Super关键字可以实现父类属性和构造函数的调用.

Interface1 extends interface2? 这个问题留给大家 思考.

13.Final关键字

Final可以修饰类,修饰方法,修饰变量

Final可以修饰类:类是不能被继承的.

Final修饰方法:方法是不会被重写的.

Final修饰变量的时候,变量是不能再被赋值,也就是说变量是只读的

14.访问修饰符

Private 默认(friedly) protected public

本类 Y Y Y Y

同包 N Y Y Y

子类 N N Y Y

其他包非子类N N N Y

总结: java的三大特性,继承,多态,封装
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: