封装

  • 面向对象的三大特征:

    • 封装
    • 继承
    • 多态
  • 封装:
    • 将对象的状态信息隐藏,不允许外部程序直接访问
    • 通过该类提供的方法来访问和操作
  • 有啥用:
    • 隐藏类的实现细节
    • 在方法中加入控制逻辑,限制对成员变量的不合理访问,比如把年龄设置为1000岁
    • 进行数据检查,有利于保证对象信息的完整性
    • 便于修改,提高代码的可维护性

访问控制符:

  • 访问控制符有四个:

    • private
    • 省略
    • public
    • protected
  • private:
    • 可用于成员变量、方法、构造方法
    • 表明被修饰成员只能在这个类的内部被访问
  • 省略:
    • 可用于成员变量、方法、构造方法、外部类
    • 表明这个被修饰成员可以被本包下的其他类访问
  • public:
    • 可用于成员变量、方法、构造方法、外部类
    • 表明这个被修饰成员可以被所有的类访问,不管是不是父子类、同包关系
  • protected:
    • 可用于成员变量、方法、构造方法
    • 表明这个被修饰成员可以被同包的类、其他包的子类访问
    • 一般是需要子类重写这个方法
  • 其他:
    • 外部类只能被public和省略两种修饰,不能用protected和private
    • 一个.java源文件,最多只能有一个public修饰的类,此时.java文件名必须跟public的类名相同
    • 如果.java文件内没有public修饰的类,那么.java文件名跟里面的类可以没有关系
  • 几条基本原则
    • 类的绝大部分成员变量都应使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才考虑用public
    • 有些方法只用于辅助其他方法的实现,也应用private修饰
    • 如果一个类主要用作其他类的父类,包含的大部分方法仅希望被其子类重写,不想被外界直接调用,则用protected
    • 希望暴露出来该其他类自由调用的方法用public修饰,因此构造方法和外部类一般都用public

  • 包存在是为什么?

    • 为了解决包重名的问题
    • 也为了更方便的管理源文件和字节码文件
  • 怎么做?
    • 包的命名:全用小写字母,不用驼峰命名法,层级之间用点隔开
    • 命名结构:公司域名反写+项目名+模块名
    • .java源文件的非注释语句的第一行,用package语句指定包名,一个.java源文件只能属于一个包
    • .class文件放在跟包结构相同的路径下
    • 一般将.java和.class文件用相同的文件目录结构管理
  • Java的常用包
    • java.lang:Java语言的核心类,自动导入,
    • java.util:工具类/接口、集合框架/接口
    • java.net:网络编程
    • java.io:输入输出
    • java.text:格式化
    • java.sql:JDBC数据库编程
    • java.awt:用于构建图形用户界面
    • java.swing:用于构建平台无关的GUI程序
  • 跨包访问的问题:
    • java.lang下面的类都是Java的核心类,系统会自动导入,比如用System.out.println()时没有让你导包
    • 访问同一个包下面的类,直接用类名即可
    • 访问其他包的类:
      • 用类的全名,比如:java.io.File file=new java.io.File("E:\");
      • 先import导入,再直接用类名访问,比如
        import java.io.File;
        File file=new File("E:\");
      • 如果import导入后,还有同名的包,比如java.util.Date和java.sql.Date,还得用类的全名访问
      • 可以用通配符"*" 一次导入一个包下的所有类,比如:import java.io.*,但不能导入这个包下的子包下的类
  • 静态导入:
    • import除了可以导包,还可以导入一个类的一个或全部类变量、类方法
    • 不导入Math类的静态方法和变量,那么在调用方法和变量时,得这样写:Math.sqrt(256);Math.PI
    • 导入Math类的静态方法和变量:import static java.lang.Math.*;则可以这样写:sqrt(256);PI;

构造方法

  • 构造方法的名字跟类的名字相同
  • 构造方法用于创建实例时的初始化,注意是初始化,而不是说创建实例就全靠它
  • new关键字调用构造器,系统为要创建的对象分配内存空间,并执行默认初始化,这个对象便产生了,此时还没构造器的事,这个对象还不能被外部访问,只能在构造器中用this引用,然后才由构造器给该对象进行初始化,这个对象再作为返回值返回给引用变量
  • 如果不写构造方法,系统默认添加一个无参构造方法,各实例变量都将被赋给默认值:0,0.0,false,null。如果写了构造器,那么系统就不再提供无参构造;不过一般写类,都要写个无参构造
  • 构造方法可以重载
  • 在一个构造方法里,想调用另一个构造方法,用this()调用,且得写在这个构造方法的第一行

其他:

  • 如果一个类的每个实例变量都是用了private修饰,且都提供了public的getter和setter方法,那么这个类就是符合JavaBean规范的类

0021 Java学习笔记-面向对象-包、构造器的更多相关文章

  1. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  2. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  3. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  4. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  5. Java学习笔记4---打包成双击可运行的jar文件

    写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...

  6. 程序设计基础·Java学习笔记·面向对象(上)

    Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...

  7. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  8. 0018 Java学习笔记-面向对象-类的基本要素

    类与对象 大街上一个个的人,就是一个个对象 类是对一群对象的抽象,比如人都有性别.年龄.姓名,都会吃饭.睡觉等.姓名性别可以抽象为变量,吃饭睡觉可以抽象为方法,像下面一样定义个类来形容人 public ...

  9. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

随机推荐

  1. WinForms 2015V2版本Reports支持更多种条形码!

    Winforms版Reports的条形码引擎从未如此强大.除了支持38种新旧条形码以外,还增添了很多您一定会喜欢的新属性.如果您因此就担心已经在使用的条形码,那么请您放宽心,因为已有的条形码会继续使用 ...

  2. [函数] Firemonkey 取得 Windows 目前 User 的 Desktop 目录

    下列方法仅提供 Windows 平台使用,所以需要使用编译开关,代码如下: uses {$IFDEF MSWINDOWS} Winapi.Windows, Winapi.SHFolder, {$END ...

  3. PHP团队编码质量提升之道

    这段文字其实只是标题党. 目前PHP猿的薪资水平普遍较高,但其实绝大多数PHP猿都不是科班出身,你问一个什么是OOP的问题可能都说不清楚. 在团队中,除了费力的去普及编程语言的基础知识,要想提高开发质 ...

  4. EasyUI-datagrid数据展示+MongoDB数据操作

    使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...

  5. Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

    在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...

  6. rabbitmq启动异常之error,{not_a_dets_file recovery.dets

    中午,公司群里面测试人员@笔者说,早上测试服务器异常,MQ起不来,重启os了也起不来,报错,上去看下了早上又因为内存oom被内核killed了,启动了下,确实启动报错,erl vm进程起来了,但是be ...

  7. IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream

    一.文件的遍历 1.需求:对指定目录进行所有的内容的列出(包含子目录的内容)-文件的深度遍历 思想:递归的思想,在递归的时候要记住递归的层次. public class FileTest { publ ...

  8. jQuery立体式数字滚动条增加

    1.html结构 <div class="numberRun1"></div> 2.js <script type="text/javasc ...

  9. 原生andriod浏览器回退后dom(click)事件全体失效问题探究

    问题描述 今天同事遇到一个神一样的BUG: 在原生浏览器下,为dom元素绑定一个click事件,其中有个a标签外链,点击a后进入其他页面,点击浏览器后退后,页面点击事件全体失效! 我于是用ios测了下 ...

  10. [deviceone开发]-QQ分享、微信分享和新浪微博分享

    一.简介 该demo主要实现QQ分享.微信分享和新浪微博分享.(调试包请到论坛扫描对应二维码下载) 二.效果图 三.相关讨论 http://bbs.deviceone.net/forum.php?mo ...