------- android培训、java培训、期待与您交流! ----------
Java面向对象1
一:面向对象
1.面向对象是基于面向过程的。
2.类与对象的关系:
类:是相关的属性和行为的集合。是一个抽象的概念。
对象:是某种事物的具体存在,具体的表现形式。
3.面向对象和面向过程的区别:
面向过程:面向过程是以函数为基础,完成各种操作。强调的是过程。
面向对象:面向对象是以对象为基础,完成各种操作。强调的是对象,结果。
4.举例说明:
举例:孙悟空三打白骨精。
面向过程:
打():
孙悟空,白骨精
面向对象:
孙悟空.打(白骨精)
举例:买电脑。
面向过程:自己做了所有的事情。
面向对象:田野(中关村卖电脑)
举例:旅游。
面向过程:自己查路线,定票,查宾馆,去火车站... 旅游...
面向对象:找个旅行社。...
总结:以后做任何事情:找对象。让这个对象做事情。自己造对象,然后用。还可以给别人用。
5.面向对象的思想特点:
A:是一种更符合人们思考习惯的思想。
B:把复杂的事情简单化了。
C:把我们从执行者变成了指挥者。
6.面向对象的分析思路:
A:分析该系统中包含哪些对象?
B:明确每个对象可以做什么?
C:明确各个对象间的关系?
步骤:
A:有哪些? 名词提取法。
大象
冰箱
测试
B:每个对象有什么?
大象:
in()
冰箱:
open()
close()
测试:
main()
C:测试
测试中调用大象和冰箱的功能。
代码体现:
class 测试类
{
public static void main(String[] args) {
冰箱对象.open();
大象对象.in();
冰箱对象.close();
}
public static void open() {
System.out.println("打开冰箱门");
}
public static void in() {
System.out.println("装进大象");
}
public static void close() {
System.out.println("关闭冰箱门");
}
}
7.如何使用呢?
A:创建对象
格式:类名 对象名 = new 类名();
B:使用成员变量和成员方法
对象名.成员变量
对象名.成员方法
二:变量
1.成员变量和局部变量的区别?
(1).定义位置区别
成员变量 在类中,方法外
局部变量 在方法中,或者方法的形式参数
(2).:初始化值的区别
成员变量 有默认初始化值
局部变量 没有默认初始化值,想先定义,赋值,才能使用
(3).存储位置区别
成员变量 存储在堆中,随着对象的存在而存在,随着对象的消失而消失。
局部变量 存储在栈中,随着方法的调用而存在,随着方法调用完毕而消失。
2.在使用变量的时候:
首先在局部范围找,有就使用。
接着在成员方法找,有就使用。
如果在成员位置没有,就报错。
使用过程中,遵循一个原则:就近原则。
3.匿名对象:是没有名字的对象。
4.应用场景:
A:当对对象方法仅进行一次调用的时
B:匿名对象可以作为实际参数进行传递
三:封装
1.概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2.思想:现在数据的赋值是没有问题的,但是不符合常理。这样的数据其实是不真实的。
那么,要保证数据的真实性,怎么办,就必须对数据进行校验。
要想做校验,就必须有逻辑结构语句,要想写逻辑结构语句,就必须定义方法。
但是,现在即使写了方法,别人还是可以通过:对象名.成员变量 直接使用。
所以,应该先解决根本问题,让外界不能直接通过对象名.成员变量访问数据。
怎么办呢?
java就给你提供了一个修饰符 private。
3.private:是一个关键字,表示私有的意义。可用于修饰成员变量和成员方法。
被它修饰完毕后的内容,在其他类中是不能直接访问的。
4.private仅仅是封装的一种体现。因为类,函数等其实也是一个封装的体现。
5.代码体现:
class Teacher {
//类的成员变量都加private
private String name;
private int age;
//一般,get/set同时出现
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
}
class TeacherDemo {
public static void main(String[] args) {
//创建对象
Teacher t = new Teacher();
//System.out.println(t.name+"***"+t.age);
//我要使用,怎么办呢?
System.out.println(t.getName()+"***"+t.getAge());
//给变量赋值
t.setName("小强");
t.setAge(26);
System.out.println(t.getName()+"***"+t.getAge());
}
}
四:构造方法
1.构造方法格式及特点:
A:方法名必须和类名一致
B:没有返回值类型
C:没有具体的返回值
2.作用:给对象进行初始化。
3.注意事项:
A:如果没有给出构造方法,那么,系统会默认给出一个无参构造方法。
public Person(){}
B:假如给了,会是什么情况呢?
只要给出了构造方法,系统将不再提供无参构造。
推荐做法:请永远手动给出无参构造。
C:构造方法重载
其实就是构造方法接收不同的参数。
4.给成员变量赋值:
A:通过set方法。推荐使用。
B:通过构造方法。
五:this关键字和static关键字
1.this关键字:this代表其所在方法所属对象的引用。
哪个对象调用方法,在方法内部就有一个隐含的this代表这个对象。
谁调用,this就代表谁。
2.应用场景:用于解决局部变量隐藏成员变量值的问题。
3.代码体现:
class Worker {
//姓名
private String name;
//年龄
private int age;
//无参构造方法
public Worker(){}
public Worker(String name,int age) {
this.name = name;
this.age = age;
}
public void setName(String name) { //name="小强";
//name = name;
//假如我能够限定第一个name是成员变量的name
//我就能够把值赋值给成员变量的name
this.name = name;
}
public String getName() {
//如果局部范围内没有name,那么就不需要加this。
//如果局部范围有name,就要加this。
return name;//省略this
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
class WorkerDemo {
public static void main(String[] args) {
//创建对象
Worker w = new Worker();
//输出成员变量的值
System.out.println(w.getName()+"---"+w.getAge());
//给成员变量赋值
w.setName("小强");
w.setAge(26);
System.out.println(w.getName()+"---"+w.getAge());
}
}
4.代码块:就是由{}括起来的代码。
分类:
定义在方法中的代码块,叫局部代码块。作用是:让变量尽可能早的从内存中消失,提高效率。
定义在方法外的代码块,叫构造代码块。作用是:把所有构造方法中的共同的内容定义在构造代码块中。
5.static关键字
(1).它可以修饰成员变量和成员方法。
(2).特点:
A:随着类的加载而加载
B:优先于对象存在
C:为什么要使用静态呢?
如果某个内容是被所有对象所共享,那么,该内容就应该用静态修饰。
没有被静态修饰的内容,其实是属于对象的特殊描述。
D:可以直接被类名调用
(3).注意事项:
A:在静态方法中是没有this关键字的。
因为静态是随着类的加载而加载。而this是对象创建才存在的。
B:静态方法只能访问静态成员变量和静态成员方法。
C:静态的内容可以通过对象调用,也可以通过类名调用。但是一般推荐使用类名调用。