如鹏网JAVA培训笔记4晓伟整理.docx
- 文档编号:9984108
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:12
- 大小:1.03MB
如鹏网JAVA培训笔记4晓伟整理.docx
《如鹏网JAVA培训笔记4晓伟整理.docx》由会员分享,可在线阅读,更多相关《如鹏网JAVA培训笔记4晓伟整理.docx(12页珍藏版)》请在冰豆网上搜索。
如鹏网JAVA培训笔记4晓伟整理
写在前边的话:
2014年12月31日如鹏线上训练营第七天
首先,2014即将过去,对那些帮助过你的,激励你的,感动你的,震撼你的,陪伴过你的,还有欺负你的,伤过你的人,说声谢谢,是这些人,让你迅速成长!
不管这一年,你过得快乐或是伤心、收获还是迷茫,都得和那些孤独的夜晚,和那些破碎的承诺,还有那些混乱的麻烦说再见了。
来年,别忘了你的梦想,一切都会好的!
其次,展望美好的2015,给自己设定一个切实可行的目标,脚踏实地一步一个脚印的走下去!
面向对象:
1.很多教程都想在刚讲解面向对象的时候就让学生理解面向对象的类和对象、封装、继承和多态是什么回事。
2.面向对象编程(OOP,ObjectOrientedProgramming)是相对于面向过程编程说的,之前我们写的代码基本都是纯的面向过程编程的,当项目复杂了,纯面向过程代码实现会很复杂,面向对象可以简化代码的结构和组织关系。
面向对象不是替代面向过程,宏观是面向对象,微观仍是面向过程。
3.类(class)和对象(Object):
人、王力宏。
4.面向对象的三大特征:
封装、继承、多态。
类的定义:
1.最简单的类:
classPerson{
privateintage;//成员变量
privateStringname;
publicvoidsetAge(int)
{
this.age=age;
}
publicvoidsetName(Stingname)
{
this.name=name;
}
publicvoidsayHello()
{
System.out.println(“大家好,我是”+name+“,我今年”+age+“岁了”);
}
};
2.一个java文件中只能定义一个public的class,且文件名必须和public类一样。
Personzxw=newPerson();//创建一个Person类型的对象。
//Person类型的变量zxw,并且把zxw指向刚才创建的对象
zxw.setName("张晓伟");//调用zxw指向的对象的setName方法
zxw.setAge(18);
zxw.sysHello();
//创建另外一个类的对象
Personww=newPerson();
ww.setAge(23);
ww.setName("旺旺");
ww.sysHello();
对象的实例化:
两个对象的内存分配:
根据模板拷贝两份。
(单独的内存)
new出的每一个对象都是一个单独的实例,两个对象之间的成员变量是独立的两份。
new出来的叫类对象或者实例(Instance)
类对象是引用传递:
1.复习:
inti=10;intj=i;i=20;之后j是多少?
j=10;而i变成了i=20;(复制传递)
2.下面的程序呢?
Personweiren=zxw;//weiren是zxw的引用,修改了weiren的内容,也实际上修改了zxw中的内容
weiren.setAge(22);
weiren.sayHello();
zxw.sayHello();
解释:
“Personweiren=zxw;”weiren指向zxw当前所指向的对象。
由于zxw当前指向的是“张晓伟”,所以weiren也就指向了“张晓伟”
如果是:
zxw=ww;
zxw.sayHello();
weiren.sayHello();
结果是:
Personweiren=zxw;//weiren是zxw的引用
weiren.setAge(23);
weiren.setName("zxwwangwang");
weiren.sysHello();
System.out.println("\n");
zxw.sysHello();
System.out.println("\n");
//再次使用类对象的引用
zxw=ww;//实现zxw是ww的引用
zxw.sysHello();
Personp1;//是定义了Person的一个变量p1
但是未对p1进行初始化,p1是个变量,但是没有对象。
如果写成:
Personp1=null;//p1不指向任何对象
p1.sysHello();//会报错,出现异常
代码中的:
类对象是引用传递
Personweiren=zxw;//“weiren”变量指向“zxw当前所指向的对象”
区别于C++的引用:
weiren是一个独立的变量有自己的内存空间,而不是“zxw”变量的别名。
只是相当于这两个变量同时指向了同一块内存中的数据。
inti=10;
int*p1=&i;
int*p2=&i;
intj=50;
p1=&j;
*p1==(j=50);
而*p2==(i=10);
注:
1.只有new才会创建一个对象,有多少个new就创建了多少个类对象。
成员变量和局部变量:
publicvoidsetAge(intage)
{
this.age=age;
}
1.局部变量必须初始化,成员变量声明时默认初始化,基本数值类型默认初始值为int、String等非基本类型初始化为null。
Why?
因为涉及到了栈内存和堆内存,以后讲。
2.当成员变量和局部变量(函数参数也可以看做局部变量)重名的时候,被看做局部变量,因此为了避免混乱,建议访问成员变量的时候加上“this.”,this代表当前对象。
3.newPerson().sayHello();//创建一个匿名对象,然后调用。
注:
根本没有用变量指向它,直接定义一个对象,通过对象调用sayHello()方法。
以上这种写法等价于:
Personp1=newPerson();//创建一个新的对象,用p1变量指向新new出的Person对象
p1.sayHello();//调用对象中的sayHello方法。
private和public:
1.我们可以把age成员变量声明为public,也可以把setAge声明为private,这样就只能在类内部调用private成员
结论:
public成员可以被类内部或者外部访问,private成员只能被类内部访问。
这样可以保护不希望外界调用的内部成员(Member,包含字段Field/变量、方法)不被外界访问。
2.直接通过public的age设置年龄,不通过setAge赋值。
3.字段(Field)/成员变量(MemberVariable)一般声明为private
构造函数:
1.构造函数是创建类对象,并且在创建完成前对类进行初始化的特殊函数。
如果定义类时没有声明构造函数,默认会给出一个无参构造函数,如果定义了任意一个构造函数,将不会提供默认的无参构造函数。
2.构造方法格式及特点:
①方法名必须和类名一致
②没有返回值类型
3.构造函数可以重载,Person(Stringname,intage)
4.用构造函数初始化和new之后通过set***初始化的区别:
语义,有的对象生来就要有一些成员变量被赋值的,否则就是怪胎。
有些属性是天生时设置的,不能后期set修改。
静态static:
1.一些场景下会要求一个类的多个实例共享一个成员变量;有时候要定义“常量”,但是java没有提供常量;有时候想定义一些不和具体对象关联、不需要new就调用的方法
2.例如:
GTK的GTK.GTK_WINDOW_TOPLEVEL、gtk_main
3.static方法不需要new就可以直接通过类名调用。
4.static变量不需要new就可以直接通过类名调用。
static变量是共享的内存空间,非static变量则是对象隔离的。
5.static方法中无法使用this关键字,因为static独立于对象存在,不是任何人的唯一。
6.static成员中只能访问static成员,不能直接访问非static成员。
非static成员可以访问static成员。
7.回顾之前写的GTK程序声明在最开始的都是static变量。
一个类的多个实例共享一个成员变量
多个对象之间共享一个变量,这时候就需要采用static
A(3)方法的第三行调用B()方法,B
(2)方法的第二行调用C()
方法,C(5)方法的第五行调用D(1,throw...)则D中throw之后的代码不会被执行;C第5行之后的代码也不会执行了;
B第二行之后不会再被执行;A第三行之后不会再被执行。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如鹏网 JAVA 培训 笔记 整理