一、类和对象:

  1. package cn.hncu.Myclasslearn;
  2. /**
  3. *
  4. * @author hncu_chx
  5. *
  6. * Mylove amin
  7. */
  8. /**类是一种数据类型,声明一个类就是定义了一个数据类型。
  9. 类的实例(instance)是类的取值,对象就是类的变量,一个对象能引用一个实例,
  10. 就像一个int变量i能够保存int类型的一个常数。
  11. 声明对象:
  12. 类 对象
  13. MyDate d1;//声明d1是MyDate类的一个对象
  14. **/
  15. public class MyDate {//类声明
  16. int year;
  17. int month;
  18. int day;//成员变量
  19. void set(int y,int m,int d){//成员方法,设置日期值
  20. year=y;
  21. month=m;
  22. day=d;
  23. }
  24. private void set(MyDate d) { //将当前对象值设置为参数值,重载
  25. set(d.year,d.month,d.day); //调用重载的同名成员方法
  26. }
  27. @Override
  28. public String toString() { //返回中文日期字符串
  29. return year + "年" + month + "月" + day + "日";
  30. }
  31. public static void main(String[] args) {
  32. MyDate d1 = new MyDate(); //声明对象、创建实例、引用赋值
  33. d1.set(2012, 1, 1); //调用类成员方法
  34. MyDate d2 = d1; //对象引用赋值
  35. System.out.println("d1:"+d1.toString()+",d2:"+d2.toString());
  36. d2.month = 10; //修改实例成员变量值
  37. System.out.println("d1:"+d1+",d2:"+d2); //输出对象字符串描述,默认调用toString()
  38. d2 = new MyDate(); //创建另一个实例
  39. d2.set(d1);
  40. System.out.println("d1:"+d1+",d2:"+d2);
  41. }
  42. }

程序运行图片:

二、类的封装

  1. package cn.hncu.Myclasslearn;
  2. /**
  3. *
  4. * @author hncu_chx
  5. *
  6. * Mylove amin
  7. */
  8. public class MyDate_2 {
  9. private int year,month,day; //私有成员变量
  10. private static int thisYear; //当前年份,私有化静态成员变量
  11. static{
  12. thisYear = 2012;
  13. }
  14. public MyDate_2(int year,int month,int day){ //构造方法,指定日期
  15. this.set(year,month,day); //调用本类的成员方法
  16. }
  17. public MyDate_2(){ //无参数构造方法,指定默认日期,重载
  18. this(1970,1,1); //调用本类已声明的其他构造方法
  19. }
  20. public MyDate_2(MyDate_2 d){ //拷贝构造方法,日期通参数,重载
  21. this.set(d);
  22. }
  23. private void set(int year, int month, int day) { //设置日期值,算法不全
  24. this.year = year;
  25. this.month = (month>=1&&month<=12)?month:1;
  26. this.day = (day>=1&&day<=31)?day:1; //this引用不能省略
  27. }
  28. private void set(MyDate_2 d) { //设置日期值,重载
  29. set(d.year,d.month,d.day);//调用同名成员方法,不能使用this()
  30. }
  31. public int getYear(){ //获得年份
  32. return this.year;
  33. }
  34. public int getMonth(){ //获得月份
  35. return this.month;
  36. }
  37. public int getDay() { //获得当月日期
  38. return this.day;
  39. }
  40. public String toString(){ //返回中文日期字符串,月日占2位
  41. return year+"年"+String.format("%02d", month)+"月"+String.format("%02d", day)+"日";
  42. }
  43. public static int getThisYear(){//获得今年年份,静态方法
  44. return thisYear; //访问静态成员变量
  45. }
  46. public static boolean isLeapYear(int year){ //判断指定年份是否闰年,静态方法
  47. return year%400==0||year%100!=0&&year%4==0;
  48. }
  49. public boolean equals(MyDate_2 d){ //比较当前日期值与d是否相等
  50. //this指代调用当前方法的对象
  51. return this==d||d!=null&&this.year==d.year&&this.month==d.month&&this.day==d.day;
  52. }
  53. public static int daysDfMonth(int year,int month){//返回指定年月的天数,静态方法
  54. switch(month){ //计算每月的天数
  55. case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;
  56. case 4:case 6:case 9:case 11:return 30;
  57. case 2:return MyDate_2.isLeapYear(year)?29:28;
  58. default : return 0;
  59. }
  60. }
  61. public int daysOfMonth(){//返回当月天数
  62. return daysDfMonth(this.year, this.month);
  63. }
  64. public void tomorrow(){//当前日期改为之后一天日期
  65. this.day++;
  66. if(this.day>this.daysOfMonth()){
  67. this.day=1;
  68. this.month++;
  69. if(this.month>12){
  70. this.month=1;
  71. this.year ++;
  72. }
  73. }
  74. }
  75. public MyDate_2 yestoday(){ //返回当前日期的前一天日期
  76. MyDate_2 date = new MyDate_2(this);//进行拷贝构造方法,创建实例,没有改变this
  77. date.day--;
  78. if(date.day==0){
  79. date.month--;
  80. if(date.month==0){
  81. date.month=12;
  82. date.year--;
  83. }
  84. date.day = daysDfMonth(date.year, date.month);
  85. }
  86. return date;//返回对象date引用的实例
  87. }
  88. }
  1. package cn.hncu.Myclasslearn;
  2. /**
  3. *
  4. * @author hncu_chx
  5. *
  6. * Mylove amin
  7. */
  8. public class MyDate_ex {
  9. public static void main(String[] args) {
  10. System.out.println("今年是"+MyDate_2.getThisYear()
  11. +",闰年?"+MyDate_2.isLeapYear(MyDate_2.getThisYear()));
  12. MyDate_2 d1 =new MyDate_2(2012, 12, 31);
  13. MyDate_2 d2 =new MyDate_2(d1);//调用拷贝构造方法复制实例
  14. System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2)+",d1.equals(d2)?"+d1.equals(d2));
  15. System.out.print(d1+"的明天是");
  16. d1.tomorrow();
  17. System.out.println(d1+"\n"+d1+"的昨天是 "+(d2=d1.yestoday()));
  18. }
  19. }
  20. /**日期类的设计问题讨论
  21. * 虽然用3个整数表示一个日期符合人的思维习惯,但很多运算实现困难,如判断日期是否有效、
  22. * 求多少天之前/之后的日期等。
  23. * 本程序中的MyDate_2中的set()方法的算法不完整,其一,仍然会产生诸如“2013-2-30”之类的
  24. * 错误日期;其二,将“2013-12-32”之类的错误日期改为“2013-12-1”,虽然得到了一个正确
  25. * 日期,但这是一种不好的程序设计习惯,因为“2013-12-1”并不是调用者希望的数据,而且调用
  26. * 者并不知道数据被修改了。正确的处理方法应该是抛出异常,详见以后的博客。
  27. * 本题这样设计知识为了演示类的封装性。
  28. * */

程序运行图片:

Java---对象与类的封装的更多相关文章

  1. Java-Runoob:Java 对象和类

    ylbtech-Java-Runoob:Java 对象和类 1.返回顶部 1. Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 ...

  2. (五)Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 消息解析 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例,有状态和行为. ...

  3. Java 教程 (Java 对象和类)

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  4. JavaSE基础(十二)--Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  5. JAVA对象和类

    Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 Java中的类 类可以看成是创建Java对象的模板. 通过下面一个简单的类来理解下Java中类的定 ...

  6. Java面向对象(类、封装)

    面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...

  7. 重新学习Java——对象和类(一)

    之前通过记笔记的方法,对于<Java核心技术>这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方 ...

  8. Java对象转xml报文和xml报文转Java对象帮助类

    import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marsha ...

  9. java中关于类的封装与继承,this、super关键字的使用

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...

  10. java对象和类学习

    定义对象的类: 一个对象的状态(属性或特征)是指那些具有他们当前值的数据域 一个对象的行为是由方法定义的,调用对象的方法就是完成对象的一个动作 使用一个通用类来定义同一类型的对象.类是一个模板,一个对 ...

随机推荐

  1. 15、SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...

  2. .net 学习路线感想

    从上到大学到现在工作,已经有六年多了,发现学习编程到以开发为工作也是一个挺长的过程的. 大学中,从c语言到java.C#到其他各种语言的学习,还有其他知识的学习如:数据库(oracle.sql Ser ...

  3. eclipse中修改内存

  4. 如何在xcode下面同时安装cocos2d-iphone 和 cocos2d-x模板,其实是因为很喜欢C++的缘故,当时学习的是前者,现在自己摸着石头过河了就(cocos2d-x安装失败 出错)

    首先在Xcode下面配置两个模板的开发环境,其实一个开源库,一个C++移植,学习需要也是,我的mac上一直用的是cocos2d-iphone, 今天想试下cocos2d-x,安装的时间发现安装成功(我 ...

  5. PSD 转化成 HTML

    一般情况下,网页设计制作完成的工作实际是:psd 效果图 转成 html+CSS 的模板页面,一般情况下,我们会拿到美工的 psd,不同的人会有不同的做法: 打开fireworks将图片切割导出为ht ...

  6. cocos2dx 实现华丽丽的滚动层.

    前言 好久没写博客了. 前几周策划要求实现一个比较多功能的滚动层控件. 这个艰巨的任务就这样自然而然的落在了我这小身板上. 当然了, 只要我出手, 难度再高的需求也变得不堪一击. 哈哈哈哈 示例图 该 ...

  7. SGU 174.wall

    题意: 判断给出的线段是否组成了多边形. Solution: 简单题,并查集+hash 这里用map实现 code #include <iostream> #include <cst ...

  8. Jdbc工具类(连接及释放)

    package cn.gdpe.jdbc; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFound ...

  9. 将fastjson元素转化为String[]

    在fastjson中如果JSONObject中添加了 String[] 类型的元素 例如 JSONObject jo = new JSONObject(); String[] array = {&qu ...

  10. 解决Collection was modified; enumeration operation may not execute异常

    今天在使用foreach循环遍历list集合时,出现Collection was modified; enumeration operation may not execute.这个错误,查了半天才发 ...