版权声明:本文为博主原创文章,转载请标注出处:http://blog.csdn.net/EnigmCode。 https://blog.csdn.net/EnigmCode/article/details/79291729
1、面向对象与面向过程
面向过程:拿到一个问题时,分析解决问题的每一个步骤,强调功能行为
面向对象:拿到一个问题时,先分析有那些对象和类,然后再分析这些类和对象具有那些属性和方法,最后分析类与类间的关系
例子:把大象装进冰箱里
面试题:你如何理解面向对象的?
2、类与对象
对象是用于计算机语言对问题区域内中事物的描述,对象通过“属性”和“方法”来分别对应事物具有的静态属性和动态行为。
类是用于描述同一类的对象的一个抽象概念,类中定义了这一类对象所具有的静态属性和动态行为。
综上可以看出:Java中类可以看成一类对象的模版,对象就是由这个模版产生的一个个具体的实例。
对象之间依靠属性的不同来相互区分。
3、类(对象)之间的关系
继承关系:XX是YY的一种
实现关系:指的是一个类实现接口的功能
依赖关系:类A使用到了类B
关联关系:一个对象的实例与另一个对象的一些特定实例存在固定的对应
聚合关系:XX是YY的一部分
组合关系:XX是YY必不可少的一部分
强弱:继承-->组合-->聚合-->关联-->依赖
4、类的组成
(1)成员变量:其实就是变量,只不过定义在类中,方法之外,并且不用初始化
(2)成员方法:就是方法,只不过不需要static修饰
(3)案例:
class Student{ String id; String name; int age; public
void study(){
System.out.println(“看书,学习,写作业”); } }
5、类的使用
(1)创建对象
格式:类名 对象名 = new 类名();
(2)使用成员
成员变量:对象名.变量名;
成员方法:对象名.方法名();
6、成员变量和局部变量的区别
(1)在类中的位置不同
A:成员变量 类中,方法外
B:局部变量 方法的形式参数列表中或者方法体中
(2)在内存中的位置不同
A:成员变量 在堆中
B:局部变量 在栈中
(3)生命周期不同
A:成员变量 随着对象的加载而加载,随着对象的销毁而销毁
B:局部变量 随着方法的调用而存在,随着方法的调用完毕而销毁
(4)初始化值不同
A:成员变量 有默认初始化值
B:局部变量 没有默认初始化值,必须先声明,再赋值,最后才能使用
7、形式参数问题
(1)基本类型
基本类型作为形式参数,需要的是该基本类型的数值。
(2)引用类型
引用类型作为形式参数,需要的是该引用类型的地址值。
8、匿名对象
(1)匿名对象:没有名字的对象,是对象简化的书写方式
(2)使用场景:
A:调用方法:仅仅只调用一次
B:作为参数传递
9、封装
(1)隐藏实现细节,提供公共的访问方式
(2)好处:
A:隐藏实现细节,提供公共的访问方式
B:提高代码的复用性
C:提高了代码的安全性
(3)使用原则
A:把成员变量隐藏
B:给出访问该成员变量的对应方法
10、private关键字
(1)是一个权限修饰符
(2)可以修饰类的成员
(3)仅仅在本类中访问
(4)标准实例:
class Student{ private String name; private int age;
public void setName(String n){ name = n; } public void getName(){ return name; } public void setAge(int a){ age = a; } public void getAge(){ return age; } public void study(){ System.out.println("看书,学习,写作业"); } }
11、this关键字
(1)this:代表本类的对象
(2)应用场景:
A:解决了局部变量隐藏成员变量的问题
B:其他用法见后文super关键字
(3)标准实例:
class Student{ private String name; private int age;
public void setName(String name){ this.name = name; } public void getName(){ return name; } public void setAge(int age){ this.age = a; } public void getAge(){ return age; } public void study(){ System.out.println("看书,学习,写作业"); } public void show(){ System.out.println("名字:"+name+",年龄"+age); } } class StudentTest{ public static void main(String[] args){ Student studenEg = new Student(); studenEg.setName("刘德华"); studenEg.setAge(22); studenEg.show(); studenEg.study(); System.out.println("姓名是:"+studenEg.getName()); System.out.println("年龄是:"+studenEg.getAge()); } }
12、构造方法
(1)作用:用来对对象的数据进行初始化
(2)特点:
A:方法名与类名相同
B:没有返回值类型
C:没有返回值
(3)注意事项
A:如果我们没有写构造方法,系统将默认给出无参构造方法
B:如果我们写了构造方法,系统将不在给出无参构造方法
建议:手动给出无参构造方法
(4)给成员变量赋值
A:无参+setXxx();
B:带参
(5)标准实例:
class Student{ private String name; private int age;
public Student(); public Student(String name,int age){ this.name = name; this.age = age; } public void setName(String name){ this.name = name; } public void getName(){ return name; } public void setAge(int age){ this.age = a; } public void getAge(){ return age; } public void study(){ System.out.println("看书,学习,写作业"); } public void show(){ System.out.println("名字:"+name+",年龄"+age); } } class StudentTest{ public static void main(String[] args){ //无参 Student studenEg1 = new Student(); studenEg1.setName("刘德华"); studenEg1.setAge(22); studenEg1.show(); studenEg1.study(); System.out.println("姓名是:"+studenEg1.getName()); System.out.println("年龄是:"+studenEg1.getAge()); //有参 Student studenEg2 = new Student("张学友",23); studenEg2.show(); studenEg2.study(); System.out.println("姓名是:"+studenEg2.getName()); System.out.println("年龄是:"+studenEg2.getAge()); } }
13、对象初始化的过程
(1)Student s = new Student();
A:加载Student.class文件进内存
B:在栈中为s开辟空间
C:在堆内存中为学生对象开辟空间
D:为学生对象的成员变量赋默认值
E:为学生对象的成员变量显式赋值
F:通过构造方法给给成员变量赋值
G:对象构造完毕,把地址赋值给s变量
练习题一:
(1):写一个Demo类,里面有一个求和功能,并测试。
(2):写一个长方形类,里面有一个求周长和面积的功能,并测试。
(3):自己分析员工类,实现,并测试。
(4):写一个包含了加减乘除的类,并测试。
14、static关键字
(1)是一个状态修饰符,静态的意思
(2)可以修饰成员变量和成员方法
(3)特点:
A:随着类的加载而加载
B:优先于对象存在
C:被所有对象共享--这也是判断是不是该使用静态的条件
D:可以通过类名调用--静态修饰的内容,可以通过类名或者对象名调用,建议使用类名调用
(4)方法访问的特点
A:普通成员方法:可以访问静态成员变量,非静态成员变量,静态成员方法,非静态成员方法
B:静态成员方法:只能访问静态成员变量,静态成员方法
C:注意:
静态中不能有this。先进入内存的不能访问后进入内存的,但是后进入内存的可以访问先进入的
15、静态成员变量和普通成员变量的区别
(1)所属不同
静态属于类,称为类变量;非静态属于对象,称为实例变量
(2)内存空间不同
静态在方法区的静态区域;非静态在堆内存中
(3)生命周期不同
静态随着类的加载而加载,类的消失而消失;非静态随着对象的创建而存在,对象的销毁而销毁
(4)调用方式不同
静态可以通过类名或者对象名调用;非静态只能通过对象名调用。
16、main 方法是静态的:public static void main(String[] args){}
17、制作帮助文档与帮助文档的使用
(1)写代码
(2)加文档注释
(3)通过javadoc工具生成说明书
18、看类的方法
public int nextInt()
左边:
是否静态:说明该方法是否可以通过类名调用
返回值类型:方法返回什么类型,就用什么类型接收
右边:
方法名称:方法名不能写错,写错就不能使用
参数列表:看参数个数,参数类型
要几个给几个,要什么类型就给什么类型