黑马程序员-第五天(面向对象)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一,理解面向对象 
1,面向对象就是一种思想。
2,面向对象的出现将问题变得简单化。
3,由执行者,过渡到指挥者。
二,找对象的方法:名词提炼法,将所有的名词提炼出来并封装为对象。
三,面向对象的三个特征:
封装,继承,多态。
四,类和对象的关系
类:对现实生活中事物的描述。 提取对象中共性内容,对象的抽象描述。就是class定义的类
对象:就是这类事物,实实在在存在个体。对应java在堆内存中用new建立的对象 。
1,其实定义类就是定义描述事物,就在定义属性和行为,属性和行为共同成为类中的成员(成员变量和成员函数)
2,定义一个类来描述学生这类事物,如:
class Students{
String name = "liuce";
char xingBie = 'n';
int year = 21;

void chifan(){
System.out.println("haohaochifan");
}
}
建立这个类的实体,也就是对象
Students stu = new Students();//其中stu是类型的变量。
操作对象中的成员
stu.name = "hehe";
五,成员变量和局部变量
1,成员变量:作用于整个类中,在堆内存中的,因为对象的存在,才在内存中存在。
如:clas Demo{
int x;//成员变量作用整个Demo类
}
2,局部变量:作用于函数中或语句中,存在于栈内存中。
六,匿名对象
1,就是没有名子的对象。如:new Students();
2,匿名对象的使用方式:
方式一:
当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化
如果一个对象进行多个成员调用,必须给这个对象起个名字。
方式二:
可以将匿名对象做为实际参数进行传递。
七,封装(Encapsulation)
  1,封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2,封装的好处:
将变量隔离,便于使用,提高重用性,提高安全性。
可以对访问的数据进行操作,提高代码的健壮性。
3,封装的原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
注:函数是java最中最小的封装体。类也是一个封装体。包也是一个封装体。框架也是一个 封装体。
4,private (权限修饰符):私有,用于修饰类中的成员(成员变量,成员函数),私有只有在本类中有效。
5,当成员变量被private修饰时,其成员变量就不能被外部其他成员访问,所以在此类中必须对外提供对应访问此
成员变量的方法。
注:私有仅仅是封装的一种体现形式。
八,构造函数
1,特点:
函数名与类名相同
不用定义返回值类型,
不可以写return 语句
注:对象一建立就会调用与之对应的构造函数
2,作用:
给对象进行初始化。
3,构造函数的细节:当一个类中没有定义构造函数时,那么系统会默认给该类加上一个空参数的构造函数。
格式:类名(){}当在类中自定义了构造函数后,默认的构造函数就没有了。
注:不同的构造函数给不同的对象进行初始化。
4,构造函数和一般函数的不同:
1,在写法上不同。
2,在运行上也不同,构造函数在对象一建立就运行,而一般方法是对象调用才执行是给对象添加对象具备 的功能。
一个对象建立一个构造函数只能运行一次,而一般函数能被对象调用多次。
5,什么定义构造函数:
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中,还要明确是否有未知内容的参与 ,如果有定义参数
6,构造代码块
1,作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行,
2,构造代码块是给所有对象进行统一初始化的。而构造函数是给对应的对象进行初始化。
3,构造代码块是定义不同对象共性的初始化内容。
九,this关键字
1,this就是代表所在函数所属对象的引用。
简单说:那个对象在调用this所在的函数就代表那个对象
2,成员中的调用也是通过this来完成的。
3,this的应用:
当定义类中功能时,该函数内部都要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用到了本类对象都用this表示。
8,构造函数间的调用
this语句用于构造函数间的互相调用。格式:this(参数);
注:this语句只能定义在构造函数中的第一行。因为初始化动作要先执行。
十,static :静态
1,用法:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,
就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,类名.静态成员。
注:特有的数据存储在对象中。static变量存储在方法区,(共享区,数据区),方法区也
存储方法的代码。
2,static的特点:
1,随着类 加载而加载,
也就是说静态会随着类的消失而消失,说明它的生命周期长。
2,优先于对象存在。
3,被所有对象共享。
4,可以直接被类名调用。

3,变量
1,成员变量(实例变量) :定义在类中变量如:String name;
2,静态变量(类变量):定义在类中并且作用static 修饰的变量。如:static String name;
4,什么时候定义静态变量?
如果数据被不同的对象共享时,就可以定义静态变量。如果不是被共享那就不用定义成静态变量。
注:静态变量是先存在的,对象是后存在的。
5,实例变量和类变量的区别?
1,存放位置:
类变量随着类的加载而存在方法区中,
实例变量随着对象的建立而存在堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失,
实例变量生命周期随着对象的消失而消失。 
6,静态的使用注意事项:
1,静态方法只能访问只能访问静态成员(成员变量,成员方法)非静态成员既可以访问
非静态,
2,静态方法中可以定义this,super关键字,因为静态优先于对象存在。所以静态方法中不可以出现this
3,主函数是静态的。
7,静态有利有弊
利处:对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。
弊端:生命周期过长,访问出现局限性,(静态虽好,只能访问静态)
8,什么时候使用静态?
因为静态修饰的内容有成员变量和函数。要从这两方面进行考虑。
9.什么时候定义静态变量?
当对象中出现共享数据时,该数据被静态所,对象中特有数据定义成非静态,存在于堆内存中。
10.什么时候定义静态函数?
录功能 内部没有访问到非静态数据(对象特有数据)那么该功能可以定义成静态的。
建立对象就是为了封装数据的。

十一,主函数
1,主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用,
2,主函数的定义:
public :代表该函数访问的权限是最大的。
static :代表主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
(String[] arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组。
注:主函数 是固定格式的,jvm识别。
jvm在调用主函数时,传入的是new String[0];中的0为0个元素。
javac 启动编译器。java 启动jvm运行程序。
十二,静态工具类
将方法都静态后,可以方便于使用,但该类还是可以被其他程序建立对象的,为了更为严谨,
强制让该类不能建立对象,可以通过将构造函数私有化完成。
十三,程序说明文档
1,使用javadoc -d 说明文档要存放的目录  -author - version  java文件
将java文件中的注释提取到要存放的目录下,-athou - version 提取文件中的作者和版本。如:
javadoc - d  F:\myJavaHelp -author -version he.java
注:只有最大权限的类,成员才能被javadoc提取
2,一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一到致
如果类被public修饰,那么默认构造函数也被public修饰,如果类没有被 public修饰,
那么默认的构造函数,也没有public修饰。
十四,静态代码块
1,格式:
static {
静态代码块中的执行语句;
}
2,静态代码块的特点:随着类的加载而执行,只执行一次。并优先于主函数执行。用于给类初始化。
注:当用到类中的内容时,类才会被加载。如:
class Demo{
static {
System.out.println("hehe");
 }
 public static void show(){
  System.out.println("heihie");
 }
}
class DemoTwo{
public static void main(String[] args){
Demo.show();//此时Demo类会被加载进内存,会执行静态代码块中的内容。
Demo demo = null; //此时程序就不会将Demo类加载进内存,没有用于Demo类的是内容
}
}
十五,对象的初始化
Person p = new Person("zhang",21);
1,因为new用到了Person.class,所以会先找到person.class文件并加载到内存中
2,执行该类中的静态代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,对属性进行默认的初始化,
5,对属性进行显示初始化。
6,对属性进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。
注:非静态成员省略的是this.静态成员省略类名.
十六,Object
1,object 是所有对象的直接或者间接的父类,该类中定义 的肯定是所有对象都具备的功能。
2,方法:
boolean equals(Object obj):其实默认比较的是地址值。
String toString():
int hashCode():返回对象的哈希值
Class getClass();返回一个Object运行时对象
3,Object类中已经提供了对对象是否相同的比较方法,如果自定义类中也有比较相同的功能,没有
必要重新定义。只要沿袭父类中的功能,建立自己特有比较内容即可。

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值