黑马程序员-JAVA基础之面向对象
来源:互联网 发布:miro mac 编辑:程序博客网 时间:2024/04/30 20:11
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
“我们之所以将自然界分解,组织成各种概念,并将其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定一语言的形式固定下来……除非赞成这个协定中的有关语言信息的组织和分类,否则我们根本无法交谈。”——Benjamin Lee Whorf(1897~1941) 摘自——java编程思想
一、面向对象
1.概念:面向对象是相对于面向过程而言的一种编程思想,面向过程是强调功能行为,而面向对象强调将功能封装在对象中,强调 具有功能的对象
2.特点:
(1)是一种符合人们思考习惯的方式
(2)可以将复杂的事情简单化
(2)将程序员从执行者转化为指挥者
(4)简化开发并提高复用
3.表现:
开发过程:寻找对象,没有对象就创建对象。开发过程就是一个不断创建对象,使用对象
设计过程:管理和维护对象之间的关系
4.三大特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)
二、类与对象
1.关系:生活中的事物可以用计算机语言来描述,java语言就是通过类来描述事物,类是具体事物在语言中的抽象表现,对象是该类所描述事物真实存在的个体。
在上图中,类就是图纸,汽车就是对内存中的对象
2.表现:用class定义类,描述对象,对象的属性就是类中变量,对象的功能就是方法(函数),变量和函数都是类的成员(成员
变量和成员函数)
3.成员变量和局部变量的区别?
成员变量:
成员变量定义在类中,在整个类都可以访问。
成员变量随着对象的建立而建立,存在于对象所在的对内存中。
成员变量都有默认的初始化值。
局部变量:
局部变量只定义在局部范围内,如函数、语句内。
局部变量只在栈内存中。
作用范围结束,变量空间会自动释放。
局部变量没有默认初始化值。
4.匿名对象
(1)、当对象的方法值调用一次时,使用匿名对象,简化代码。
(2)、可以将匿名对象作为实际的参数进行传递。
三、封装(encapsulation)
1.概念:将对象的属性和实现细节进行隐藏,仅对外提供公共的访问方法。
2.好处:将变化隔离;便于使用;提高重用性;提高安全性
3.private关键字:
概念:是一种权限修饰符,用来修饰成员(成员变量和成员函数),被修饰的成员只在本类中有效。
常用:将成员属相封装后,对外提供get和set方法对其访问,提高安全性。
4.构造函数:
特点:函数名与类名一致
没有具体返回值并且不定义返回值类型
每一个类都有默认的空参数的构造函数,当在类中自定义了构造函数后,默认的构造函数就不存在了
多个构造函数以重载的形式存在
对象一建立,就会调用与之对应的构造函数
作用:用于给对象初始化
class Student {private String name;private int age;private int score;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}// 具有姓名、年龄、成绩的构造函数public Student(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}}
上面的程序就是将学生(student)类进行封装,将姓名、年龄、成绩属性隐藏,对外提供get和set方法,并且定义了一个构造函数
5.构造代码块:
作用:给所有对象进行统一初始化
特点:先于构造函数执行
什么时候用:当对象具有共性的属性时,可以放在构造代码块中初始化
6.this关键字:代表本类对象,哪个对象调用this所在的函数,this就代表哪个对象。
注意:this只能写在构造函数的第一行,因为要进行初始化。
class Person{private int age;//人的年龄属性Person(int age){this.age = age;}//比较两个人的年龄是否相同public boolean compare(Person p){return this.age == p.age;}}class PersonDemo{public static void main(String[] args) {Person p1 = new Person(24);Person p2 = new Person(20);System.out.println(p1.compare(p2));//p1调用compare方法,this代表p1对象}}
7.static关键字:是一种修饰符,用于修饰成员(包括成员变量和成员函数),被static修饰的成员可以直接被类名调用。
特点:(1)随着类的加载而加载
(2)优先于对象而存在,所以内部不能定义this和super
(3)静态只能访问静态
什么时候用?
当类中出现共享数据时,可以将定义为静态
当函数中没有访问到非静态数据时,可以将函数定义为静态。
class Person{private String name;public void setName(String name){this.name = name;}public String getName(){return name;}static String country = "china";//中国人的国籍属性共有的属性public static void show()//静态函数{System.out.println("静态函数被调用");}}class StaticDemo {public static void main(String[] args) {Person p = new Person();p.setName("lee");System.out.println("name="+p.getName()+"+++country="+p.country);//结果:name=lee+++country=chinaPerson.show();//结果:静态函数被调用}}
8.静态代码块:
格式:
static{}
特点:随着类的加载而执行,而且只执行一次,先于构造函数执行。
9.实例变量和类变量的区别:
(1)存放位置。
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
(2)生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。
10.对象的初始化过程:
Person p = new Person("zhangsan",20);</span>
该句话所做的事情:
1.new用到了Person.class,首先找Person.class文件并加载到内存中。
2.执行该类中的静态代码块,给Person.class进行初始化
3.在堆内存中开辟空间,并分配内存地址值
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对对象的属性进行显示初始化
6.对对象进行构造代码块的初始化
7.对对象进行对应构造函数初始化
8.将堆内存中的地址值赋给栈内存中的p变量
四、设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
单例设计模式:保证一个类在内存中只有一个对象
懒汉式:
class Single{private static Single s = new Single();private Single(){}public static Single getInstance(){return s;}}
饿汉式:具有延时加载的特点,但是在多线程下会不安全,可以加同步解决问题,但是效率会降低,可以加双重判断来提高效率
class Single{private static Single s = null;private Single(){}public static Single getInstance (){if (s == null){synchronized(Single.class)//加锁,更安全{if (s == null){s = new Single();}}}return s;}}
- 黑马程序员----JAVA基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----Java基础之面向对象
- 黑马程序员--JAVA基础之面向对象
- 黑马程序员-JAVA基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员-JAVA基础之面向对象
- 黑马程序员 Java基础之面向对象
- 黑马程序员--Java基础--面向对象基础
- 黑马程序员-----java基础(面向对象基础)
- 黑马程序员---Java基础--06天(面向对象之二)
- 黑马程序员---Java基础--07天(面向对象之三)
- 黑马程序员---Java基础--08天(面向对象之三多态)
- 黑马程序员-----java基础三(之面向对象)
- 黑马程序员-java学习基础04-面向对象之继续
- 黑马程序员--Java基础之面向对象总结(一)
- 黑马程序员---java基础之面向对象(二)
- SVM算法1
- 从上往下打印二叉树
- iOS开发网络—09简单介绍ASI框架的使用
- IOS开发 - KVC 和 KVO
- oracle视图及其他对象操作
- 黑马程序员-JAVA基础之面向对象
- lcc源代码解析之x86后端
- 设计模式学习笔记--工厂方法模式
- Hadoop学习笔记(十五)---Hbase shell命令的使用
- iOS开发网络—10监测网络状态
- 游戏开发经验分享:我所理解的打击感
- 软件项目管理之我见
- 对Android自定义控件中的onMeasure方法的理解
- Java中Properties类