java面向对象Word文档格式.docx
- 文档编号:19412131
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:73
- 大小:3.04MB
java面向对象Word文档格式.docx
《java面向对象Word文档格式.docx》由会员分享,可在线阅读,更多相关《java面向对象Word文档格式.docx(73页珍藏版)》请在冰豆网上搜索。
年龄:
+wwf.age);
对象生成后如果没赋值将自动为对象中的属性赋以默认值“null”,数字默认为“0”
在方法中声明对象时必须赋值;
!
!
错误:
NullPointerException—>
空指向异常(对象未分配堆内存空间)——没有声明(new)对象
对象的引用传递:
Personwwf2=null;
wwf2=wwf;
//wwf2就指向wwf的空间,wwf2改变值之后,wwf的值也会跟着改变;
在类中调用方法用this来调用,表示类中的属性;
封装:
把需要的东西保护起来,用private来实现封装(属性不能让外部看见);
private声明的属性只能在本类看见;
通过set方法来设置private成员变量的属性
使用:
privateStringname;
//私有成员
publicvoidsetName(Stringstr){//必须是setName
name=str;
}
通过get方法来取得private成员变量的属性值
publicStringgetName(){
returnname;
构造方法:
——它具有与类相同的名称;
——它不含返回值类型的定义;
——它不能在方法中用return语句返回一个值
构造方法调用时间:
—构造方法在实例化对象(new的时候)时被自动调用,主要用来为类中的属性初始化
对象的声明:
类对象名=new类();
其中“类()”就是调用构造方法;
构造方法的重载:
——与一般方法重载类似,只要参数的个数或类型不同即可
在java中每个类必须有一个构造方法,如果没有构造方法,则会自动生成一个无参的什么都不做的构造方法,因为所有的对象产生时搜必须调用构造方法;
如果程序中已经明确写出了构造方法,则不会再产生一个无参的什么都不做的方法
无论采用哪种方法为类中的属性赋值,最好都经过setter方法对输入的内容进行检测,而getter方法只是将内容简单返回,用private定义;
类的继承:
一、无继承时多类协作:
二、类继承和实现:
在类定义是通过extends实现类的继承,定义类的一般形似为:
类访问权限修饰符(public、private...)class类名extends父类名{
类体
}
eg:
classPerson{//定义一个Person类
intsalary;
voidemployed(){//Person类的employed方法
if(salary==0)
System.out.println("
nojob"
);
else
job"
}
}
classChildenentendsPerson{//Chlid类继承Person类
intage;
voidPrintAge(){System.out.println("
Age:
+age"
}
publicstaticvoidmain(String[]args){
Childrenc=newChildren();
c.salary=560;
//从Person类中继承的属性变量
c.age=12;
//本类的变量属性
c.printAge();
//本类的方法
c.employed();
//从Person类继承的方法
当一个子类继承父类时,意味着将自动继承父类的非private成员,包括成员变量和成员方法。
然而构造方法不可继承。
继承类一般的初始化过程是:
静态变量初始化、安级别高到低的顺序运行父类的构造方法、实例变量初始化、运行继承类的构造方法。
默认执行的父类构造方法是无参构造方法。
如果父类显式地定义了构造方法,且均有参数,这样的自动调用会使编译出错。
三、类继承时方法的重写:
可在子类中重写方法而对父类中的相同方法进行屏蔽;
*子类中重写的方法须与其父类被重写的方法原型相同,即方法名,返回类型,参数皆一致;
*子类中重写父类的方法时,不可以降低方法的访问权限。
classChildrenextendsPerson{
voidprintAge(){System.out.println("
+age);
voidemployed(){
Achildshouldstudyintheschool."
//对父类中的employed()方法进行重写
Childrenc=newChildren();
Final:
在修饰类成员如果是用final(表示"
最终的"
意思)来修饰,则该类成员只可被继承,不能被重写
Final修饰类中的若干个属性表示该属性必须被赋值并且只能被赋一次值(默认值不算真正的赋值)
初始化方式有两种:
·
在定义成员变量的同时初始化
·
在类中所有的构造函数中初始化
一个类的所有普通方法内部都不可以修饰final修饰过的成员变量的值
定义如下:
final类型方法名(参数名){...}
四、super关键字
1、调用父类的构造函数:
super关键字提供了对父类的访问。
可以用super主动调用父类的构造方法、访问父类中的成员;
若要执行父类带参的构造方法,需用super显式地调用。
classGrandParent{
GrandParent(Strings){
GrandParent"
+s);
//带有参数的构造方法
classParentextendsGrandParent{
Parents(Strings){super("
parent"
}//主动调用父类构造方法
classChildrenextendsParent{
Children(Strings){super("
Children"
publicstaticvoidmain(String[]a){
newChildren("
www"
}
2、访问父类的成员:
子类定义与父类同名的成员,父类的成员就会被隐蔽,在子类方法中直接访问到的子类的成员。
我们可以在子类发的方法中用super访问父类中隐藏的成员,访问的形式是:
super.变量super.方法(参数)
3、可以通过super(),里面根据传入的参数去调用父类中指定的构造方法,默认情况下调用的是无参构造方法
classA
{
Stringname="
wwf"
publicStringsay(){
return"
hello"
}
};
classBextendsA
wsl"
returnsuper.say()/*调用父类的say()方法*/+"
world!
!
+super.name;
//用super.方法(),可以由子类去调用父类中指定的构造方法;
}//name如果没有指定用super.属性的那话,那么指的是B类中的name——"
;
//如果加了super.属性,即指A类中的name属性——wwf
publicclassJavaDemo20{
publicstaticvoidmain(String[]args){
System.out.print(newB().say());
//输出B的构造函数
this关键字:
1、可以调用本类中的方法
*一般方法
*构造方法
调用构造方法时,this()要放在构造方法的首行
2、可以调用本类中的属性
3、可以表示当前对象
使用this完成构造方法间的相互调用。
this();
//调用本类中的无参构造方法,构造方法必须在首行被调用。
为了能够为类中的属性初始化
classPerson
{
privateStringname;
privateintage;
publicvoidsetName(Stringname)
this.name=name;
//this调用本类中的属性
publicStringgetName()
returnname;
publicclassooDemo13
publicstaticvoidmain(Stringargs[])
PersonP1=newPerson();
P1.setName("
gary"
System.out.println(per.getName());
this与super的区别?
this与super在使用上很相似,都可以调用其他方法,其属性,构造方法【都必须放在首行】
this与super调用构造的操作不能同时在一个构造方法中出现
五、阻止类的继承:
用final来实现阻止类的继承[类访问权限]finalclass类名{...};
eg:
finalclassA{
A(){System.out.println("
It'
safinalclass"
}//final阻止类的继承
classBextendsA{
B(){
System.out.println("
FinalText!
//继承类,编译时出现错误;
publicstaticvoidmain(String[]args){
newB();
}
String类:
两种赋值方式:
Stringname=newString("
王文烽"
->
开辟了2个空间,其中有一个是垃圾空间
Stringname="
->
只开辟一个空间;
比较字符串是否相等,使用String.Equals()放方法:
Str1.Equals(Str2);
Equals"
与"
=="
区别:
Equals:
可以比较内容,是两个字符串内容的比较
==:
数值比较,比较的是内存地址的值是否相等
**String特殊之处:
String使用了JAVA中的共享设计模式,在JAVA中如果有两个值是一样的,那么两个值只使用一块内存空间
Stringname1="
Stringname2="
——>
name1与name2使用同一块内存空间
*String类中的内容一旦声明则不可改变
Bytedata[]=String.getBytes()//将字符串转化为字符数组
StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。
每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append方法始终将这些字符添加到缓冲区的末端;
而insert方法则在指定的点添加字符。
importjava.util.*;
publicclassStringBuffer1
{
publicstaticvoidmain(String[]args)
//Stringstr3;
StringBufferstr1=newStringBuffer("
abcdefg"
str1.append("
\n"
//字符串后面追加子串
hijklmn"
System.out.println(str1);
//str3=str1.toString();
System.out.print(str1.toString().trim());
//去掉str1前后的空格
//插入,删除和替换
StringBufferstr2=newStringBuffer("
String"
//不能直接用StringBufferstr2="
System.out.println(str2);
str2.append("
'
stest."
123.456"
str2.insert(6,"
Buffer"
//将"
插入到str2的第6个字符后(从1开始)
inti=str2.length();
//字符串str2的长度
System.out.println("
字符串str2的长度:
+str2);
intj=str2.indexOf("
1"
//字符1首次出现的位置
字符1首次出现的位置:
+j);
intk=str2.indexOf("
3"
字符3首次出现的位置:
+k);
str2.delete(j,k+1);
i=str2.length();
str2.replace(i-3,i+10,"
---OK"
将str2后3位替换成“---OK”"
str2.deleteCharAt(5);
删除第5个字符:
str2.reverse();
将字符串进行倒序处理:
str2.setCharAt(1,'
P'
将str2中第1个字符替换成P:
//回避一种写法
//如果程序中非要使用此种类型的代码,则可以使用StringBuffer代替
//StringBuffer与String的本质区别,在于StringBuffer可以改变
publicclassOODemo12
publicstaticvoidmain(Stringargs[])
Stringstr="
A"
;
for(inti=0;
i<
100;
i++)
str+=i;
System.out.println(str);
};
对象数组的定义:
类名称对象数组名[]=null;
Personp[]=null;
对象数组名=new类名称[];
p=newPerson[10];
——对象数组定义:
Personp=newPerson[10]
对象数组在使用时需要为每一个元素分别实例化。
栈内存->
保存的是对象的名字
堆内存->
对象的具体内容(属性)
全局代码区->
所以方法
在类中写的一个变量,如果使用static声明,则表示次属性为共有属性,即:
所有对象都可以访问此属性。
全局数据区->
存放static类型的属性
对于static类型的变量,最好是通过类名称修改,意味着static类型声明的属性或方法可以通过类名称直接调用
static属于全局,也就是类的属性和方法,换句话说一个类,不管有多少个实例,却只有一个全局变量
类.static属性类.static方法
static属性可以被static和非static类型的方法所使用
非static属性不可以被static方法所使用
静态方法不能调用非静态属性或方法
非静态方法可以调用静态属性或方法
publicclassJavaDemo13{
publicstaticvoidmain(String[]args){
Person.setCode("
111"
//由类名称直接调用static方法;
Personp1=newPerson();
Personp2=newPerson();
p1.code="
110"
p1.name="
文烽"
p1.age=21;
p2.code="
120"
p2.name="
淑兰"
p2.age=20;
Personp3=newPerson();
p3.code="
151"
//共享最后一个static值
//Person.code="
122"
//用类名.属性(类名.方法())来直接修改属性值
System.out.print(p1.shout());
System.out.print("
System.out.print(p2.shout());
classPerson{
staticStringcode;
Stringname;
intage;
Stringshout(){
return"
地区编码:
+code+"
姓名:
+name+"
,年龄:
+age;
//如果必要的话应对code的内容进行检查是否正确;
//静态方法由类名称直接调用
staticvoidsetCode(Stringc){
//在static不要出现this调用
code=c;
代码块:
四种——普通代码块:
是写在代码中的语句块
——构造块:
是直接写在类中的语句块,构造块优先于构造方法执行,执行多次
publicclassJavaDemo14{
publicstaticvoidmain(String[]args){
newPerson();
classPerson{
{
HelloWorld!
}//构造块
Person(){
Person()构造方法"
}//声明一个构造方法,构造块优先于构造方法执行
//输出HelloWorld!
//Person()构造方法
——静态块:
直接写在类中的,通过static声明的语句块,优先于构造块和构造函数执行,作用是为静态属性初始化,只执行一次
//静态块,只执行一次
static{
静态块"
}//声明一个构造方法
//输出:
//静态块
//HelloWorld!
——同步代码块(多线程)
main方法是程序的如果,应被外部所看见,应该是public,不能是private
Stringages[]:
表示运行时输入的参数,参数的输入:
java.类名称参数1,参数2,参数3,...
publicclassJavaDemo15{
publicstaticvoidmain(String[]args){
//Stringages[]:
java.JavaDemo15参数1,参数2,参数3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 面向 对象