黑马程序员_面向对象
来源:互联网 发布:淘宝上口碑好的书包店 编辑:程序博客网 时间:2024/05/08 21:28
1、面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。
2、面向对象三大特征:封装、继承、多态
3、类和对象的关系:
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同称为类的成员(成员变量和成员方法)
4、封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离、便于使用、提高重用性、提高安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问
private(私有):权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效。
5、static用于修饰成员(成员变量和成员函数)
被修饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类名调用。类名.静态成员 【方法区、共享区、数据区】----存放类中的方法和共享数据。
什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的,用类名直接调用。
class ArrayTool{ public static void main(String[] args) { int[] arr={5,8,4,1,3,5,8,77,55,99}; int max=GetMax.getMax(arr); System.out.println("max="+max); }}class GetMax{ public static int getMax(int[] arr) { int max=0; for(int x=0;x<arr.length;x++) { if(arr[x]>arr[max]) max=x; } return arr[max]; }}
构造代码块(定义对象共性初始化内容):给对象进行初始化,对象一建立,就运行,而且优先于构造函数执行。
构造代码块是给所有对象进行统一初始化,而构造函数是给对应对象进行初始化。
6、this关键字
this关键字:代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表那个对象。
构造函数间调用只能用this语句,this语句只能放在构造函数第一行,因为初始化动作要先执行,构造函数的权限和类的权限一致。
静态代码块(可以验证类是否加载):
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而加载,只执行一次,并优先于主函数,一般用于类的初始化。
Person p = new Person("zhangsan",20);
该句话都做了什么事情?
1)因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2)执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3)在堆内存中开辟空间,分配内存地址。
4)在堆内存中建立对象的特有属性。并进行默认初始化。
5)对属性进行显示初始化。
6)对对象进行构造代码块初始化。
7)对对象进行对应的构造函数初始化。
8)将内存地址付给栈内存中的p变量
7、单例模式
设计模式:解决某一类问题最行之有效的方法,java中有23中设计模式
单例设计模式:解决一个类在内存只存在一个对象
1)避免其他程序过多建立该类对象,禁止其他程序建立该类对象(将构造函数私有化)
2)为了让其他程序可以访问到该类对象,在本类中,自定义一个对象(在类中创建一个本类对象)
3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式(提供一个方法可以获取到该对象)
对于事物该怎么描述就怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
方法被调用只有两种方式:对象调用和类名调用(static)
例如: class SimpleDemo//单例设计模式{ public static void main(String[] args) { Student s1=Student.getInstance(); Student s2=Student.getInstance(); s1.setAge(20); s1.setName("zhangsan"); System.out.println(s2.getAge()+";"+s2.getName()); }}class Student{ private String name; private int age; public void setAge(int age) { this.age=age; } public int getAge() { return age; } public void setName(String name) { this.name=name; } public String getName() { return name; } private Student(){} public static Student s=new Student();//先初始化对象,称为:饿汉式类一进内存,就创建对象,设计建议饿汉式 public static Student getInstance() { return s; }}/* class Student{ private static Student s=null;//懒汉式,延迟加载,调用getInstance方法时,才建立对象 private Student(){} public static Student getInstance() { if(s==null) s=new Studente(); return s; } }*/
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 关于Qt状态机的记录
- JPA(java persistence API)详解
- STL algorithm算法set_symmetric_difference,set_union(54)
- Android开发指南
- iOS 8.0.1更新变砖 iPhone6降级修复教程
- 黑马程序员_面向对象
- Android Notification通知栏开发详解
- 【转】关于交换空间
- linux——开启lighttpd的https功能
- uva 11806 Cheerleaders(容斥)
- mysql 匹配
- ESL:更简洁、更高效的标准加载器
- 浮动子元素不能撑起父元素最有效解决方法
- [LeetCode] Valid Palindrome