1、马士兵JAVA视频教程第03章面向对象第三章. 面向对象编程一、 面向对象编程思想:从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式面向对象更加强调运用人类在日常的思维逻辑中经常才赢的思想方法与原则,如抽象分类,继承,聚合,多态二、 对象和类的概念1. 对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性对象是属性(成员变量)和方法的集合。一类事物的具体的某一个东西(符合这类事物的具体特征的某个东西)叫对象2. 类是同种对象的集合与抽象,类中定义了这一类对象所应具
2、有的静态和动态属性。关系:类可以看成一类对象的模板,对象可以看成该类的一个具体实例,瓶子是一个类,某个瓶子就是对象三、 面向对象设计思想和步骤:(1) 分析问题中有哪些类那些对象(2) 分析这些对象中应该具有的属性和方法(3) 分析类与类之间的关系四、 Java与面向对象1. 对象是Java程序的核心,在java程序中“万事万物皆对象”。(先定义类才有对象)2. 对象可以看成静态属性(成员变量)和动态属性(方法)的封装体3. 类是用来创建统一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法4. J2SDK提供了很多类供编程人员使用,编程人员也可以自定义自己的类5. 五、
3、 Java类的定义类的定义主要由成员变量和方法组成声明成员变量: type=defaultValue例如:private int id;private int age = 20;声明方法:()例如:public int getAge( ) return age ;public class Person int id; int age = 20; void Person(int _id, int _age) id = _id; age = _age; public static void main(String args) Person tom = new Person(); tom.Perso
4、n(1, 25); /Person jerry = new Person(); Point p = new Point(); class Point Point() int x; int y;六、 成员变量:1:成员变量可以使用java语言中任何一种数据类型(包括基本类型和引用类型);2:作用范围为整个类体;3:在定义成员变量时可以对其初始化,如果不对其初始化,java系统会默认给你赋初始值注意: 局部变量必须赋初始值才可以使用 Byte,short,int- 0 Long - 0L char - u0000 float - 0.0F double - 0.0D bloolean - fals
5、e 所有引用类型 - Null七、 引用类型(C中的指针,占两块内存)除了java语言中基本类型以外的变量类型Java中的对象是通过引用对其操作的 内存值/* 声明string类型的引用变量,但是没使它指向一个对象*/String s null/* 使用new语句创建一个String类型的对象并用S指向它,以后可以通过S完成对其的操作*/S = new String (“hello world!”); 0X3a123b如何在内存中区分类和对象?类是静态的概念,代码区对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存八、
6、 对象的创建和使用1. 必须使用new关键字创建对象2. 使用:对象(引用) .队员变量 来引用对象的成员变量3. 使用:对象(引用).方法(参数列表) 来调用对象的方法4. 同一对象的每个对象有不同的成员变变量存储空间5. 同一类的每个对象共享该类的方法Java的方法定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为: 修饰符1 修饰符2 . 返回值类型 方法名( 形式参数列表 ) Java 语句; 语法解释:1. 形式参数:在方法被调用时用于接收外界输入的数据。2. 实参:调用方法时实际传给方法的数据。3. 返回值:方法在执行完毕后返回给调用它的环境的数
7、据。4. 返回值类型:事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。A. Java语言中使用下述形式调用方法:对象名.方法名(实参列表)B. 实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。C. return语句中止方法的运行并指定要返回的数据。Java中进行函数调用中传递参数时,遵循传递的原则:基本类型传递的是该数据本身,引用类型传递的是对象的引用,不是对象本身九、 类和对象关系(内存中)一十、 构造函数 2009-12-9 13:44 构造函数是定义在java类中的一个用来初始化对象的函数1. 构造函数名字与类的名字相同,大小写也保持一致2. 使用new+构
8、造方法创建一个新的对象3. 构造函数与类同名且没有返回值。即便是void也不能写4. 注意:当无指定构造函数时,编译器为类自动添加形为: 类名( ) 的构造方法例如:Person类的构造函数 public class Personint id;int age = 20;Person(int _id , int _age)Id = _idAge = _age; Public static void main ( String agrs) Person tom = new Person(1,25); Person jrry = new Person(1,27);内存详细过程详解: 一十一、 约定俗
9、成的命名规则类名的首字母大写变量名和方法名的首字母小写运用驼峰标示一十二、 内存分析过程视频: J2SE_5.0_第03章_面向对象 06_内存解析_1.avi 07_内存解析_2.avi 源码: TestBirthdateTest.javaclass BirthDate private int day; private int month; private int year; public BirthDate(int d, int m, int y) day = d; month = m; year = y; public void setDay(int d) day = d; public
10、 void setMonth(int m) month = m; public void setYear(int y) year = y; public int getDay() return day; public int getMonth() return month; public int getYear() return year; public void display() System.out.println (day + - + month + - + year); public class Test public static void main(String args) Te
11、st test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); System.out.println(date= + date); d1.display(); d2.display(); public void change1(int i) i = 1234; public void change2(BirthDate b
12、) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 调用过程演示(1)调用过程演示(2)调用过程演示(3)调用过程演示(4)调用过程演示(5)调用过程演示(6)调用过程演示(7)调用过程演示(8)调用过程演示(9)调用过程演示(10)08_内存解析_3.avi练习: 视频: 09_练习.avi 10_答案.avi 11_内存解析.avi源码:TestPointTestPoint.java class Point double x, y, z; Point(double _x, double
13、 _y, double _z) x = _x; y = _y; z = _z; void setX(double _x) x = _x; double getDistance(Point p) return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z); public class TestPoint public static void main(String args) Point p = new Point(1.0, 2.0, 3.0); Point p1 = new Point(0.0, 0.0, 0.0)
14、; System.out.println(p.getDistance(p1); p.setX(5.0); System.out.println(p.getDistance(new Point(1.0, 1.0, 1.0); 内存调用过程见视频2009-12-9 19:43:33一十三、 方法重载 OverLoad 2009-12-11 10:45:05 方法的重载指一个类中可以定义有相同的名字,但参数个数不同和参数类型不同的多个方法。调用时会根据不同的参数表选择对应方法能被编译器区分的方法既是构成重载 构造函数(方法)也可以重载 见二十三、继承中的构造方法 P20方法重载可以改变返回值的类型。
15、(不知道为什么2009-12-12 21:24:11)例子1 12_方法重载与内存解析.aviTestOverLoad.javapublic class TestOverLoad public static void main(String args) Person p = new Person(); Person p1 = new Person(400); Person p2 = new Person(2, 500); p.info(); p.info(ok); class Person /定义三个灵活的方法 Person() id = 0; age = 20; Person(int _id
16、) id = _id; age = 23; Person(int _id, int _age) id = _id; age = _age; /成员变量定义 private int id; private int age = 20; /方法定义 public int getAge() return age; public void setAge(int i) age = i; public int getId() return id; void info() System.out.println(my id is : + id); void info(String t) System.out.p
17、rintln(t + id + id); 例子2 12_方法重载与内存解析.aviTestOverloadtest.javapublic class Test void max(int a , int b) System.out.println( a b ? a : b ); 参数类型不同,可以被 编译器识别 void max(short a , short b) System.out.println(short); System.out.println( a b ? a : b ); void max(float a, float b) System.out.println( a b ? a
18、 : b ); 参数返回类型不同,构 成重名不能被编译器 识别int max(float a, float b) System.out.println( a b ? a : b ); public static void main(String args) Test t = new Test(); t.max(3, 4); short a = 3; short b = 4; t.max(a, b); 一十四、 对象创建与使用_复习与练习 源码:TestCircle.java 视频:14_TestCircle程序分析_1.avi 15_TestCircle程序分析_2.avi 16_TestCi
19、rcle程序分析_3.aviclass Point private double x; private double y; Point(double x1, double y1) x = x1; y = y1; public double getX() return x; public double getY() return y; public void setX(double i) x = i; public void setY(double i) y = i; /class Circle private Point o; private double radius; Circle(Poi
20、nt p, double r) o = p; radius = r; Circle(double r) o = new Point(0.0, 0.0); radius = r; boolean contains(Point p) double x = p.getX() - o.getX(); double y = p.getY() - o.getY(); if(x*x + y*y radius * radius) return false; else return true; public void setO(double x, double y) o.setX(x); o.setY(y);
21、public Point getO() return o; public double getRadius() return radius; public void setRadius(double r) radius = r; public double area() return 3.14 * radius * radius; public class TestCircle public static void main(String args) Circle c1 = new Circle(new Point(1.0,2.0), 2.0); Circle c2 = new Circle(
22、5.0); System.out.println(c1:(+c1.getO().getX()+, +c1.getO().getY()+),+c1.getRadius(); System.out.println(c2:(+c2.getO().getX() +,+c2.getO().getY()+),+c2.getRadius(); System.out.println(c1 area = +c1.area(); System.out.println(c1 area = +c2.area(); c1.setO(5,6); c2.setRadius(9.0); System.out.println(
23、c1:(+c1.getO().getX()+, +c1.getO().getY()+),+c1.getRadius(); System.out.println(c2:(+c2.getO().getX()+, +c2.getO().getY()+),+c2.getRadius(); System.out.println(c1 area = +c1.area(); System.out.println(c1 area = +c2.area(); Point p1 = new Point(5.2, 6.3); System.out.println(c1.contains(p1); System.ou
24、t.println(c1.contains(new Point(10.0,9.0); 一十五、 this关键字定义:在类的方法定义中使用this关键字代表使用该方法的对象引用 使用 this (argument_list) 调用本类的另外的构造方法使用this.xxx = xxx 获取本类另外一个构造方法传来的值构造函数和一般成员函数在继承中的区别的练习使用:当必须指出当前使用方法的对象是谁时要使用this有时使用this可以处理方法中成员变量和参数重名情况this可以看做一变量,它的值是当前对象引用public class Leafint i = 0;leaf (int i )this .i
25、 = i ;leaf increament() i+; return this;void print( ) System.ot. println( “i = ”+I );public static void main(String args)Leaf leaf = new Leaf(100);Leaf.increament().increament().print();一十六、 Static关键字1. 在类中,使用是static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对该类的所有对象来说,static成员变量只有一份。2. 用static声明的方法为静态方法,
26、在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。- -静态方法不再是针对某个对象调用,所以不能访问非静态成员3. 可以通过对象引用或者类名(不需实例化)访问静态成员。4. 我觉得就是在使用内部类时使用, 如果不需要内部类队形想与其外围类之间有联系,那么可以将内部类声明为 static,这通常叫 嵌套类. 嵌套类意味着: 1 要创建嵌套类的对象,并不需要其外围类的对象. 2 不能从嵌套类的对象中访问非静态类的外围类对象! 5. 例子 源码:Cat.java 视频:18_static关键字_1.avi 19_static_关键字_2.avipubli
27、c 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(); 一十七、 package和import 2009-12-11 15:00:211. java引入包(package)机制提供类的多重类命名空间。2. package语句作为java源文件第一句,指明该文件定义的类所在包。 package pkg1.pkg2.pkg3 .; 约定俗成的命名:com.域名.xxx3. java编译器把语句对应于文件系统的目录管理,package语句中使用” . ”点值指明包(目录)层次
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2