java面向对象知识点.docx

上传人:b****4 文档编号:12368478 上传时间:2023-04-18 格式:DOCX 页数:22 大小:76.35KB
下载 相关 举报
java面向对象知识点.docx_第1页
第1页 / 共22页
java面向对象知识点.docx_第2页
第2页 / 共22页
java面向对象知识点.docx_第3页
第3页 / 共22页
java面向对象知识点.docx_第4页
第4页 / 共22页
java面向对象知识点.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

java面向对象知识点.docx

《java面向对象知识点.docx》由会员分享,可在线阅读,更多相关《java面向对象知识点.docx(22页珍藏版)》请在冰豆网上搜索。

java面向对象知识点.docx

java面向对象知识点

面向对象的知识点

1,path和classpath

·path:

是指向所有java命令的

·classpath:

是java执行时所需要的环境属性,java命令根据classpath所指定的区域找到所需要的类,如果此类不存在,则会出现类没有发现的错误。

2,Java的数据类型划分:

·基本数据类型

|-数值型

|-整数:

byte、short、int、long

|-小数:

float、double

|-字符型:

char

|-布尔型:

boolean

·引用数据类型:

数组、类、接口

|-就是讲一个堆内存空间的使用权交给了其他对象

3,Java中的关键字:

·未使用到的关键字:

goto、const

·新增加的关键字:

assert、enum

4,方法

·概念:

可重复调用的代码,如果现在一个方法要由主方法直接调用,则声明格式为:

Publicstatic返回类型|void方法名称(参数列表){[return返回值]}

·方法中可以直接使用return返回到方法的调用处

·方法重载:

方法名称相同,但是参数类型或或个数不同,条用时根据参数的类型或个数的不同,调用的方法体也不同,System.out.println()方法体本身就属于重载操作

5,数组

·定义格式:

数据类型数组名[]=new数据类型[长度];

|-程序中一旦出现new关键字就表示开辟新的堆内存地址。

6,面向对象的三大特征:

封装,继承、多态

7,类与对象的关系

·有类之后才能产生对象

·类是对象的操作模板,对象是类的实例,没有对象类是无法使用的。

8,类使用class定义,类中由属性或方法组成

9,对象的产生

·声明对象一:

类名称对象名称=new类名称();

·声明对象二:

先声明对象,然后实例化对象:

类名称对象名称=null;//在栈内存中开辟了一段新空间

对象名称=new类名称();//开辟对应的堆内存空间,保存的是所有的属性内容

10,封装性

在java中使用private关键字来实现封装操作,被封装的属性是无法对外访问,需要getter及setter方法。

方法的命名要求:

第一个单词的首字母小写,之后每个单词的首字母大写。

11,构造方法

构造方法的主要目的是为类中的属性初始化,构造方法定义与类名称相同,但是没有返回值类型,在使用关键字new实例化对象的时候调用,如果一个类中没有明确的定义构造方法的话,则会自动生成一个无惨的,什么都不做的构造方法。

也就是说保证一个类中至少一个构造方法存在,构造方法本身也是可以进行方法的重载,只要参数的类型或个数不同就可以完成重载操作。

12,匿名对象:

只使用一次的对象,使用一次之后将被垃圾收集。

13,类的开发步骤

1.习题讲解

1.编写并测试一个代表地址的Address类,包括以下属性:

国家、省份、城市、街道、邮编。

要求:

可以此地址类中得到一个完整的地址信息。

程序代码如下:

classAddress

{

privateStringnational;

privateStringprovince;

privateStringcity;

privateStringstreet;

privateStringzipcode;

publicAddress(Stringnational,Stringprovince,Stringcity,Stringstreet,Stringzipcode){

this.setNational(national);

this.setProvince(province);

this.setCity(city);

this.setStreet(street);

this.setZipcode(zipcode);

}

publicStringgetInfo(){

return"地址信息:

"+"\n"+

"\t国家:

"+this.getNational()+"\n"+

"\t省份:

"+this.getProvince()+"\n"+

"\t城市:

"+this.getCity()+"\n"+

"\t街道:

"+this.getStreet()+"\n"+

"\t邮编:

"+this.getZipcode();

}

publicvoidsetNational(Stringnational){

this.national=national;

}

publicvoidsetProvince(Stringprovince){

this.province=province;

}

publicvoidsetCity(Stringcity){

this.city=city;

}

publicvoidsetStreet(Stringstreet){

this.street=street;

}

publicvoidsetZipcode(Stringzipcode){

this.zipcode=zipcode;

}

publicStringgetNational(){

returnthis.national;

}

publicStringgetProvince(){

returnthis.province;

}

publicStringgetCity(){

returnthis.city;

}

publicStringgetStreet(){

returnthis.street;

}

publicStringgetZipcode(){

returnthis.zipcode;

}

}

publicclassDizhi

{

publicstaticvoidmain(Stringargs[]){

Addressadd=newAddress("中国","北京","北京市","西城区","100088");

System.out.println(add.getInfo());

}

}

2.定义并测试一个代表员工的Employee类,属性包括:

员工姓名、员工编号、员工基本薪水、员工薪水增长额;方法包括:

构造方法、获取员工姓名、获取员工编号、获取员工基本薪水、计算增长后的工资总额。

程序代码如下:

classEmployee

{

privateStringname;

privateintnumber;

privatefloatsell;

privatefloatsumsell;

publicEmployee(Stringname,intnumber,floatsell,floatsumsell){

this.setName(name);

this.setNumber(number);

this.setSell(sell);

this.setSumsell(sumsell);

}

publicStringgeterName(){

returnthis.name;

}

publicintgeterNumber(){

returnthis.number;

}

publicfloatgeterSell(){

returnthis.sell;

}

publicfloatgeterSumsell(){

returnthis.sumsell;

}

publicfloatgeterZongsell(){

returnthis.sell+this.sumsell;

}

publicStringgetInfo(){

return"员工信息:

\n"+

"员工姓名:

"+getName()+"\n"+

"员工编号:

"+getNumber()+"\n"+

"基本薪水:

"+this.getSell()+"\n"+

"增长薪水:

"+this.getSumsell();

}

publicvoidsetName(Stringname){

this.name=name;

}

publicvoidsetNumber(intnumber){

this.number=number;

}

publicvoidsetSell(floatsell){

this.sell=sell;

}

publicvoidsetSumsell(floatsumsell){

this.sumsell=sumsell;

}

publicStringgetName(){

returnthis.name;

}

publicintgetNumber(){

returnthis.number;

}

publicfloatgetSell(){

returnthis.sell;

}

publicfloatgetSumsell(){

returnthis.sumsell;

}

}

publicclassYuangong

{

publicstaticvoidmain(Stringargs[]){

Employeeemp=newEmployee("张三",111,8888.0f,888.0f);

System.out.println("员工信息:

");

System.out.println("\t员工姓名:

"+emp.geterName());

System.out.println("\t员工编号:

"+emp.geterNumber());

System.out.println("\t基本薪水:

"+emp.geterSell());

System.out.println("\t增长薪水:

"+emp.geterSumsell());

System.out.println("\t增长后薪水:

"+emp.geterZongsell());

System.out.println(emp.getInfo());

}

}

3.定义一个圆形类,可以返回一个圆的面积,周长。

2.讲解知识点

1.String类及String类的相关操作方法;

2.This关键字

3.Static关键字

4.内部类

2.1String类

2.1.1String的两种实例化方式:

String本身是一个类,在String类中定义了如下的构造方法:

publicString(Stringoriginal)

可以接受一个String类的对象,并重新实例化String对象,除了此方法之外还可以采用直接赋值的方式进行对象的实例化。

publicclassStringdemo01

{

publicstaticvoidmain(Stringargs[]){

Stringstr1="hello!

!

!

";//使用直接赋值的方式对String对象实例化

Stringstr2=newString("String对象的实例化");//通过构造方法实例化String对象

System.out.println(str1+str2);

}

}

2.1.2String的两种比较方式

假设,现在有以下的一道程序,观察String的比较问题:

publicclassStringdemo02

{

publicstaticvoidmain(Stringargs[]){

Stringstr1="hello!

!

!

";//使用直接赋值的方式对String对象实例化

Stringstr2=newString("hello!

!

!

");//通过构造方法实例化String对象

Stringstr3=str2;

System.out.println("str1==str2-->"+(str1==str2));

System.out.println("str1==str3-->"+(str1==str3));

System.out.println("str2==str3-->"+(str2==str3));

}

}

运行结果为:

此问题,从内存关系中来分析一下结果:

从此得知,两个String的比较是实际上两个对象的堆空间地址的比较,具体的来讲,实际上比较的是地址的值,因为地址是以数值的形式存在的。

但是现在比真正比较的不是地址的值,而是两个字符串的内容,所以现在需要使用String类中的equals()方法进行比较,此方法定义如下:

publicbooleanequals(Stringstr);

范例:

使用equals比较

publicclassStringdemo03

{

publicstaticvoidmain(Stringargs[]){

Stringstr1="hello!

!

!

";//使用直接赋值的方式对String对象实例化

Stringstr2=newString("hello!

!

!

");//通过构造方法实例化String对象

Stringstr3=str2;

System.out.println("str1equalsstr2-->"+str1.equals(str2));

System.out.println("str1equalsstr3-->"+str1.equals(str3));

System.out.println("str2equalsstr3-->"+str2.equals(str3));

}

}

此时结果为都是true,因为此时比较的两个字符串的内容。

注意:

String的比较中:

==是比较两个字符串的地址值

equals是比较两个字符串的内容。

2.1.3一个字符串实际上就是String的匿名对象

一个字符串是用“”””双引号括起来的,那么一个字符串的常量实际上本身就属于String的一个匿名对象。

例如:

publicclassStringdemo04

{

publicstaticvoidmain(Stringargs[]){

Stringstr1="hello";//使用直接赋值的方式对String对象实例化

System.out.println("hello".equals(str1));

}

}

结果为true,此时证明一个字符串(这里是hello)就是一个String的匿名对象。

2.1.4String的两种实例化方式的区别

所有的操作以内存图形表示出来。

Stringstr1=”hello!

!

!

”;

现在在堆内存空间中只开辟了一个空间,不会产生多余的内容。

如果现在使用关键字new的方式又会如何?

Stringstr2=newString(”hello”);

实际上上述的实例化中已经开辟了两个堆内存空间,之中第一个是垃圾。

所以比较两中实例化方式,更合适使用第一个直接赋值方式Stringstr1=“hello”;

所以实际开发中绝对不能使用关键字new调用String类的String(Stringorg)的构造方法。

而且,如果使用直接赋值的方式也可以减少堆内存的开销。

例如:

publicclassStringdemo05

{

publicstaticvoidmain(Stringargs[]){

Stringstr1="hello";//使用直接赋值的方式对String对象实例化

Stringstr2="hello";

Stringstr3="hello";

System.out.println("str1==str2-->"+(str1==str2));

System.out.println("str1==str3-->"+(str1==str3));

System.out.println("str3==str2-->"+(str3==str2));

}

}

结构都为true。

为什么呢?

实际上以上的三个对象表示的都是同一个空间的引用,因为对于String来讲使用直接赋值方式会在字符串池中保存内容。

如果之后再声明字符串的时候发现内容一样了,则不会中心开辟空间了,而是在从内存池中取出数据继续使用。

2.1.5字符串的内容一旦声明之后则无法修改

publicclassStringdemo06

{

publicstaticvoidmain(Stringargs[]){

Stringstr="hello";

str+="world";

System.out.println(str);

}

}

虽然最终输出的结果该表了“helloworld”,但是字符串内容真的改变了吗?

实际上来讲,字符串变量改变中变得是内存空间的地址指向,而本身的字符串的内容没有任何的变化。

如下所示:

所以,在实际的开发中以下的代码绝对避免:

publicclassStringdemo07

{

publicstaticvoidmain(Stringargs[]){

Stringstr="hello";

for(inti=100;i<100;i++){

str+=i;

}

System.out.println(str);

}

}

以上的操作要不断的断开已有的链接,指向新链接100次,整体代码的性能极其低,所以遇到此类代码绝对不要使用。

2.2String类的常用操作方法(重点)

2.2.1,字符与字符串

在各个语言中实际上一个字符串就是表示一组字符。

所以在String类中提供了以下的方法操作字符与字符串间的转换关系:

·根据字符串中的索引找到指定位置的字符:

publiccharcharAt(intindex)

·将字符串变为字符数组:

publicchar[]toCharArray()

·将字符数组变为字符串:

|-将全部的字符数组变为String类型:

publicString(char[]value)

|-将部分的字符数组变为String类型:

publicString(char[]value,intoffset,intcount)

范例:

取出字符串中指定位置的字符publiccharcharAt(intindex)

publicclassStringAPIdemo01

{

publicstaticvoidmain(Stringargs[]){

Stringstr="hello";

charc=str.charAt

(1);

System.out.println(c);

}

}

范例:

字符串字符数组(互相转换)publicchar[]toCharArray()

publicclassStringAPIdemo02

{

publicstaticvoidmain(Stringargs[]){

Stringstr="helloworld!

!

!

";

charc[]=str.toCharArray();//将字符串变为字符数组

for(inti=0;i

System.out.print(c[i]+",");

}

Stringstr1=newString(c);//将全部字符数组重新变为String

Stringstr2=newString(c,0,5);//将0~5的字符数组变为String

System.out.println(str1);

System.out.println(str2);

}

}

2.2.2,字节与字符串

与字符数组的操作一致,一个字符串变为字节数组,一个字节数组也可以变为字符串:

·将String变为字节数组:

publicbyte[]getByte()

·将字节数组变为String:

|-全部:

publicString(byte[]bytes)

|-部分:

publicString(byte[]bytes,intoffset,intlength)

范例:

将字符串变为字节数组

publicclassStringAPIdemo03

{

publicstaticvoidmain(Stringargs[]){

Stringstr="helloworld!

!

!

";

byteb[]=str.getBytes();//将字符串变为字节数组

Stringstr1=newString(b);//将全部字符数组重新变为String

Stringstr2=newString(b,0,5);//将0~5的字符数组变为String

System.out.println(str1);

System.out.println(str2);

}

}

2.2.3,判断是否以指定的字符串开头或结尾

·判断是否以指定的字符串开头:

publicbooleanstartsWith(Stringprefix)

·判断是否以指定的字符串结尾:

publicbooleanendsWith(Stringsuffix)

范例:

验证操作

publicclassStringAPIdemo04

{

publicstaticvoidmain(Stringargs[]){

Stringstr="**helloworld##";

System.out.println(str.startsWith("**"));

System.out.println(str.endsWith("##"));

}

}

2.2.4,替换操作

使用以下的方法可以完成替换的操作:

|-publicStringreplaceAll(Stringregex,Stringreplacement)

范例:

替换内容

publicclassStringAPIdemo05

{

publicstaticvoidmain(Stringargs[]){

Stringstr="helloworld";

StringnewStr=str.replaceAll("l","x");

System.out.println(newStr);

}

}

把str中的“l”换成了“x”。

结果为:

hexxoworxd

2.2.5,字符串截取

使用以下两个方法可以完成字符串截取操作:

·

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1