1、面向对象面向对象是一种思想,能让复杂的问题简单化,让我们角色从执行者变成指挥者,不要知道过程,只要知道结果。 (一切皆对象。 )描述一个事物,其实就是在描述事物的属性和行为。对象的特点在于封装数据,数据包含着属性和行为。我们用类来描述一个事物,然后引用类来建立一个对象。也可以在本类建立一个主函数来中创建本类对象,这个叫在本类中创建本类对象。一般一个程序可以由很多个类组成,也可以有多个主函数,但一般有一个主函数就可以。格式:引用类名 对象名=new 构造函数名(参数) ;例:class DuiXiang则建立对象为:DuiXiang mingZi=new DuiXiang() ;如果要实现功能,
2、则格式为:mingZi.变量或函数名() ; (string 是 java 中的字符串。 String 类是不可变的,对 String 类的任何改变,都是返回一个新的 String 类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。 )面向对象主要的部分:(类和对象的关系,封装(机箱故事) ,继承,多态,构造函数,this,static ,内部类,抽象类,接口)面向对象之封装函数是最小的封装体。类也是一个封装体。private:私有的,权限修饰符,用来修饰类中的成员(成员变量 、成员函数) ,其
3、只在本类中有效。每个成员变量通常都会对应两个访问方式:一个设置,一个获取。注意:私有仅是封装的一种表现形式。因为语句都必须在函数内,所以,私有化后,再提供访问方式,就可以在访问方式的函数内实现变量控制。这样就提高代码的健壮性。一般进行封装,要对类中的大部分属性都隐藏,最低权限是 private。类里有一个 setXxx 函数(一般返回值是 void,直接获取,要带参数)和 getXxx函数(有返回值类型,但一般没参数,getXxx 之后一般用一个变量来接收:string x=p.getXxx) ,那代表一定有一个私有化属性。成员变量都有初始化值, 局部变量可以没有。举例:class XueSh
4、engprivate String name;public void setName(String name)/这个函数方便以后赋值this.name=name;public String getName()/这个函数是方便以后有需要调用的,比如以后要打印 name 的值return name;构造函数:函数名与类名一致,不用返回值类型,不可以用 return,主要用来初始化对象。对象一建立,就默认调用其构造函数。一个对象一建立,就有其默认的属性和行为。 (如一个人刚出生就会呼吸,哭.) 。如果我们没有指认,那么类建立就会默认建一个构造函数(类名() ,不然对象无法初始化,也就无法建立。 (注
5、意:只要我们有指认,那么就不会默认建构造函数)其与普通函数的区别除了写法上之外:1,构造函数只在对象建立时运行一次,不再运行了,而普通函数可以调用多次,另外,构造函数是用来初始化对象的,而一般方法是用来添加对象具备的功能。何时我们要手动添加构造函数:当我们分析事物时,该事物存在一些特性或行为,那么我们就给其定义一个构造函数,如果有变量参与运算,那么我们就给构造函数定义一个参数。构造函数写法举例:class PersonPerson(String name,int age)/注意:在新建一个对象时要加上参数进行区分,因为一个类可以放很多个构造函数。/比如:Person p =new Person
6、 (“fada“,20 )this.name = name;this.age = age;构造代码块:1,所有对象在建立时都先执行构造代码块初始化,再执行构造函数初始化。2,作用:当所有对象有共性时,那么就可以定义一个构造代码块(例如:所有小孩先出来就是哭,然后才有其它的属性)构造代码块的写法(就是在类里面用一个大括号)举例:class PersonSystem.out.print(“fada“)/这样一写,那么以后每次建立一个构造函数时便先初始化这个构造代码块this 关键字的用法This 在类中就是三个代表:代表对象的成员变量,在函数中代表对象调用函数,代表类中的构造函数。格式:this.
7、 变量= 变量;this 是用来区分局部变量和成员变量同名时的关键字,因为如果在构造函数里比如(name=name ) ,那么其是赋值给他本身,而不是赋值给类里面的 name。何是用 this?当定义类中的函数时,需要调用该函数的对象时,这个时候就用this 来表示这个对象。但凡本类功能内部使用到了本类对象,用 this 表示。看到 this 就是有代表对象,代表哪个对象就看其所在功能被哪个对象调用。这样就知道谁在参与运算。例:class Personprivate String name;Person(String name)this.name = name;/this.name=p1.na
8、me;class PersonDemo3 public static void main(String args) Person p1 = new Person(“fada“);this 的应用之定义类中函数的调用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用 this 来表示这个对象。但凡本类功能内部使用了了本类对象,都用 this 表示。例:class Personprivate String name;Person(String name)this.name = name;/this.name=p1.name;this.fada();/其实就= p1.fada();/这里
9、写这 p1 是因为 p1 这个对象在调用这个函数。一句话,谁调用它就在代表谁。private int age;Person(int age)this.age = age;public void fada()System.out.println(“fada“);/*需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。*/public boolean compare(Person p) return this.age=p.age;class PersonDemopublic static void main(String args) Person p1 = new Person(20
10、);Person p2 = new Person(25);/因为是两个人比,所以要先建立两人的对象boolean b = pare(p2);/这里定义了一个布尔型变量去接收 p1 调用 compare 函数的值System.out.println(b);另一种 this 用法:格式 this(变量)用于构造函数间的相互调用,而且只能放在构造函数的第一行。然后先初始化其 this 调用的构造函数,再初始化本身的构造函数。其实 this(变量);=new 构造函数名(变量) ;(因为所有构造函数名是一样的,都是重载函数,所以,通过变量来标记构造函数,用 this 去引用)例:class Perso
11、nprivate String name;private int age;Person()System.out.println(“person run“);Person(String name)This();this.name =name;Static(静态)关键字:static 是一个修饰符:三种修饰:修饰类的变量、方法和构造代码块。静态方法只能直接引用和访问静态变量和方法注意(函数即方法,对象也叫实例)有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面
12、加上关 键 字static(静态的) 就能创建这样的成员。如果一个成员被声明为 static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为 static。static 成员的最常见的例子是 main( ) 。因为在程序开始执行时必须调用 main() ,所以它被声明为 static。 声明为 static 的变量称为静 态 变 量 或类变量。可以直接通过类名引用静态变量,也可以通过实例名来引用静态变量,但最好采用前者,因为后者容易混淆静态变量和一般变量。静态变量是跟类相关联的,类的所有实例共同拥有一个静态变量。 关键点:静态变量与实例变量的区别:静态
13、变量也叫类变量,为所有对象所共有,所以一个对象的变量值改变,那么所有对象的值一起发生改变。而实例变量则是各自独立的不受影响。声明为 static 的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。静态方法中不能使用 this 关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。特有属性随着对象存储于堆内存中,而 static 修饰后的属性,存在于方法区.什么时候使用静态修饰符?当对象中出现共享数据时,使用静态修饰。但对象内的特有数据要定义成非静态存在于堆内存中。而对于方法时:当功能内部没有访问到非静态数据时, (即
14、对象的特有数据)那么可以使用静态修饰。静态代码块:用于给类做初始化的。不管有没有对象都执行,只要调用了类里面成员或方法,就会执行,而且优先于主函数,优先执行级别最高。例:class JingTaistatic int age;static String name;static/静态代码块初始化类的,所以最先运行。System.out.println(“name=“+name);/下面是构造代码块,第二个运行System.out.println(“age=“+age);public static void jing(int x)/被对象调用,第三个运行。x =age+1;/因为 age 是静态的
15、,所以能调用System.out.println(“x=“+x);class FaDapublic static void main(String args)JingTai p =new JingTai();p.jing(2);文档注释:文档注释有编译工具进行,具体一个要注意的地方是:类名前必须要有 public修饰。要编译的方法名必须有 public 修饰javadoc 注释标签语法author 对类的说明标明开发该类模块的作者version 对类的说明标明该类模块的版本see 对类、属性、方法的说明 参考转向,也就是相关主题param 对方法的说明对方法中某参数的说明return 对方法的
16、说明 对方法返回值的说明exception 对方法的说明 对方法可能抛出的异常进行说明命令是:javadoc -d 存放目录名称 -author -version 类名.java/*这是一个静态修饰符 static 的应用说明author 李四version V1.1*/*这是一个测试类*/public class JingTai/*空参数构造函数*/*age 一个整数型变量*/public static int age;/*name 一个字符串型变量*/public static String name;staticSystem.out.println(“name=“+name);Syste
17、m.out.println(“age=“+age);/*打印 x 的值param x 接收一个 int 型整数*/public static void jing(int x)x =age+1;System.out.println(“x=“+x);注意:main 方法作为程序入口,应该在 public 的类 Test 中定义设计模式:做一个模式,使其能解决一类问题,这样,碰到类似的问题,直接套就可以了。java 中 23 种设计模式:举例:单例设计模式:解决一个类在内存只存在一个对象。不再新生成。思路:1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象2,还为了让其他程序可以访问到
18、该类对象,只好在本类中,自定义一个对象。3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。步骤:1,将构造函数私有化。2,在类中创建一个本类对象。3,提供一个方法可以获取到该对象。两种方式:饿汉式class Erprivate Er();private static Er e =new Er();public static Er getEr()return e;懒汉式class Erprivate Er();private static Er e =null;public static Er getEr()if(e=null)e=new Er();return e;虽然懒汉式可
19、以延迟加载对象,但为代码的简洁性和安全性,日常用的还是饿汉式。继承继承就是将两个类的共性描述提取出来,单独进行描述,从而简化代码,提高复用性。格式:class 子类名 extends 父类名关健字为 extends :继承判断两个类是否有所属关系,那么我们就继承一下,看父类所具有的内容属性,子类是否全都需要具备。如果是,那么他们所属关系成立,就是继承。注意:千万不要为了获取其他类的功能,简化代码而继承。必须是类与类之间有所属关系才可以继承。所属关系 is a。例如:class A /void demo1()void demo2()class B /void demo1()void demo3()我们可以让 B 继承下 A,但发现,A 中还具有 demo2 这个方法是 B 所不具备的,所以他们俩的继承关系不成立,但我们可以把两个类的共性提取出来,成为一个class Cvoid demo1()那么 A 和 B 就能够继承 C,这样就实现在代码的简化和复用。Java 语言中:java 只支持单继承,不支持多继承。因为多继承容易带来安全隐患:当多个父类中定义了相同功能,当功能内容不同时,子类对象不确定要运行哪一个。但是 java 保留这种机制。并用另一种体现形式来完成表示。多实现。java 支持多层继承。也就是一个继承体系