欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    第四天 面向对象.docx

    • 资源ID:2440429       资源大小:838.20KB        全文页数:41页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第四天 面向对象.docx

    1、第四天 面向对象第四天 面向对象_033.1、static关键字(重点)这个关键字一直在见到,从未被真正使用过,而在Java中,static关键字可以用于定义属性及方法。3.1.1、使用static定义属性在讲解static定义属性操作之前,首先编写如下的一道程序。范例:现在定义一个表示北京人的操作类,所有人所在的城市都是北京class Person private String name ;private int age ;String country = 北京 ;/此处暂时不封装public Person(String name,int age) this.name = name ;thi

    2、s.age = age ;public String getInfo() return 姓名: + this.name + ,年龄: + this.age + ,城市: + this.country ;public class TestDemo public static void main(String args) Person per1 = new Person(张三,20) ;Person per2 = new Person(李四,21) ;Person per3 = new Person(王五,22) ;System.out.println(per1.getInfo() ;System

    3、.out.println(per2.getInfo() ;System.out.println(per3.getInfo() ;那么,以上的程序,现在的内存分配图如下。很明显,现在不管有多少个Person对象,那么所有的country属性都应该是相同的内容,那么现在请思考一下,如果有一天时光穿越了,北京变为燕京了,这个时候如果Person类已经有了5000W个对象产生了,你认为此时的代价是什么?5000W个Person对象都需要修改country的内容,那么如果按照修改一个对象的country属性内容要花费1ms来计算,那么5000W个对象的修改时间是:50000S =很多分钟,那么现在就可以

    4、发现问题:country属性应该是一个公共的内容,但是以上代码是将其分配给了每一个对象;对country属性维护的时候要考虑的对象太多了,也不方便。所以,如果要想将country与普通属性相区分,并且表示公共的概念,则应该使用static关键字完成。class Person private String name ;private int age ;static String country = 北京 ;/此处暂时不封装public Person(String name,int age) this.name = name ;this.age = age ;public String getIn

    5、fo() return 姓名: + this.name + ,年龄: + this.age + ,城市: + this.country ;public class TestDemo public static void main(String args) Person per1 = new Person(张三,20) ;Person per2 = new Person(李四,21) ;Person per3 = new Person(王五,22) ;per1.country = 燕京 ;System.out.println(per1.getInfo() ;System.out.println(

    6、per2.getInfo() ;System.out.println(per3.getInfo() ;那么,现在一个对象对country属性所做的修改,一定会影响到其他对象,但是这里有一个问题了,既然使用了static定义的属性表示的是公共属性,那么如果现在由某一个对象修改是不合适的,应该由所有对象的集合的最大代表,就是类了,即:static属性最好的调用,是通过“类名称.static属性”的方式来完成。Person.country = 燕京 ;/类.static属性通过本程序,就应该清楚以下几点:使用static定义的属性不在堆内存之中保存,保存在全局数据区;使用static定义的属性表示类

    7、属性,类属性可以由类名称直接进行调用;static属性虽然定义在了类之中,但是其可以在没有实例化对象的时候进行调用(普通属性保存在堆内存里,而static属性保存在全局数据区之中);提示:在以后的开发之中,首先想到的不是static属性,就是普通属性。3.1.2、使用static定义方法除了使用static定义属性之外,方法上也可以使用static进行定义,那么很明显,使用static定义的方法也可以在没有实例化对象产生的情况下由类名称直接进行调用。class Person private String name ;private int age ;private static String

    8、country = 北京 ;/此处暂时不封装public Person(String name,int age) this.name = name ;this.age = age ;public static void setCountry(String c) country = c ;public static String getCountry() return country ;public String getInfo() return 姓名: + this.name + ,年龄: + this.age + ,城市: + this.country ;public class TestD

    9、emo public static void main(String args) Person.setCountry(燕京) ;/类.static方法()System.out.println(Person.getCountry() ;Person per1 = new Person(张三,20) ;System.out.println(per1.getInfo() ;以上的代码如果单独观察应该都不难理解,主要都是由于static定义的特殊性所决定的,但是现在的类之中就比较热闹了,因为分成了两派:static派、非static派,而对于方法的操作有如下两个定义:static定义的方法不能调用非s

    10、tatic的方法或属性;非static定义的方法可以调用static的属性或方法。讨论:为什么要有这样的限制呢?使用static定义的属性和方法,可以在没有实例化对象的时候使用;非static定义的属性和方法,必须实例化对象之后才可以进行调用。3.1.3、主方法在讲解主方法之前,首先来思考一下小小的区别:在之前讲解Java方法定义的格式给过以下格式:如果一个方法在主类之中定义,并且由主方法直接调用的时候,那么前面必须有public static。public static返回值类型方法名称(参数列表) return 返回值 ;范例:观察代码public class TestDemo publi

    11、cstaticvoid main(String args) print() ;/直接调用publicstaticvoid print() System.out.println(Hello World .) ;按照之前所学习的概念来讲,此时,表示的是一个static方法调用其他的static方法,但是如果这个时候的print()方法上没有static呢?所有的非static方法几乎都有一个特点:方法要由实例化对象调用。public class TestDemo public static void main(String args) new TestDemo().print() ;/对象调用pu

    12、blic void print() /非static方法System.out.println(Hello World .) ;那么现在继续来观察主方法的组成,可以发现里面有很多的关键字:public:是一种访问权限,表示公共;static:此方法由类名称直接调用,执行类:java类名称;void:主方法是一切的开始,开弓没有回头箭;main:系统规定的一个方法名称,执行类的时候默认找到此名称;String args:表示的是一些运行时参数,通过字符串接收。范例:接收参数public class TestDemo public static void main(String args) for

    13、(int x = 0 ; x args.length ; x +) System.out.println(argsx) ;所有的属性在执行类的时候使用空格分隔,例如:java TestDemo参数参数参数但是,由于在默认情况下空格作为参数的分隔符,那么如果说现在要输入的参数本身就存在空格呢?那么这些参数上可以使用“”声明:java TestDemo hello world hello mldn。3.1.4、static关键字的使用在实际的工作之中,使用static的原因有二:希望可以在没有实例化对象的时候可以轻松的执行类的某些操作;现在希望表示出数据共享的概念。范例:统计一个类产生的实例化对象

    14、个数一个类肯定可以有多个实例化对象产生,那么现在希望增加一个统计操作,可以统计出一个类之中的所产生的实例化对象的个数。如果现在要产生新的实例化对象,则一定会调用类中的构造方法,所以可以在构造方法中增加统计,而且这个统计的变量,应该是所有对象共享的,那么应该将其定义为static属性。class Person private static int count = 0 ;public Person() /构造方法一定会调用System.out.println(对象个数: + + count) ;public class TestDemo public static void main(String

    15、 args) new Person() ;new Person() ;new Person() ;范例:为类的属性自动命名例如,在一个类之中可能会有多个构造方法,那么假设类之中存在了一个name属性,要求这个属性一定要有内容,即:如果用户调用了无参构造方法,那么name也需要有一个具体的内容出现,所以这个时候就可以利用static完成。class Book private static int count = 0 ;private String title ;public Book() /自动命名this(NOTITLE - + count +) ;public Book(String tit

    16、le) this.title = title ;public String getTitle() return this.title ;public class TestDemo public static void main(String args) System.out.println(new Book().getTitle() ;System.out.println(new Book(Java SE).getTitle() ;System.out.println(new Book().getTitle() ;以上的两个代码只是为了说明static声明变量的特点,实际之中基本上很少去这样使

    17、用,不过如果出现了类似的应用,应该能够反应出来其实现的基本原理。3.2、代码块(了解)代码块是在程序之中使用“”定义起来的一段程序,而根据代码块声明位置以及声明关键字的不同,代码块一共分为四种:普通代码块、构造块、静态块、同步块(暂时不讲解)。3.2.1、普通代码块普通代码块是定义在方法之中的代码块,在讲解此操作之前,首先来观察以下代码。public class TestDemo public static void main(String args) if (true) int x = 10 ;/局部变量System.out.println(x = + x) ;int x = 100 ;/全

    18、局变量System.out.println(x = + x) ;普通代码块就是if取消。public class TestDemo public static void main(String args) /普通代码块int x = 10 ;/局部变量System.out.println(x = + x) ;int x = 100 ;/全局变量System.out.println(x = + x) ;几乎用不到的,知道就行了。3.2.2、构造块普通代码块是定义在方法之中的,而构造块是定义在类之中的代码块。class Person public Person() System.out.print

    19、ln(构造方法。) ;/构造块System.out.println(构造块。) ;public class TestDemo public static void main(String args) new Person() ;new Person() ;new Person() ;可以发现,构造块优先于构造方法执行,而且每当有一个新的实例化对象产生的时候,就会出现构造块的执行。3.2.3、静态块静态块也是定义在类之中的,如果一个构造块上使用了static关键字进行定义的话,那么就表示静态块,但是静态块要考虑两种情况:情况一:在非主类之中定义的静态块class Person public Pe

    20、rson() System.out.println(构造方法。) ;/构造块System.out.println(构造块。) ;static System.out.println(静态块。) ;public class TestDemo public static void main(String args) new Person() ;new Person() ;new Person() ;可以发现,静态块优先于构造块执行,而且不管有多少个实例化对象产生,静态块只调用一次。情况二:在主类中定义的静态块public class TestDemo static System.out.printl

    21、n(静态块。) ;public static void main(String args) System.out.println(Hello World .) ;在主类之中的静态块优先于主方法执行。那么既然有静态块有这个特点,实际上就可以简单的修改一下。有意思的操作:不使用主方法输出“Hello World.”,彻底终结了public class TestDemo static System.out.println(Hello World .) ;System.exit(1) ;以上代码在JDK 1.7之前都可以正常使用,JDK 1.7之后完蛋了,bug终于解决。3.3、思考题要求完成一个系统的登陆程序,通过初始化参数输入用户名和密码,如果用户名是“mldn”,密码是“hello”,则显示欢迎光临的信息,如果不是则显示“登陆失败”的信息。设计的时候多考虑一下类的组成结构,以及可能出现的问题。如果说


    注意事项

    本文(第四天 面向对象.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开