黑马程序员:java基础知识(一)

---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

一、java内存:堆内存和栈内存
    在函数中定义的变量,包括基本数据类型的变量和对象的引用变量,都是在函数的栈内存中分配。
    堆内存是用来存放有new关键字创建的对象和数组。在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。当一个对象或数组处于不可达状态时,java虚拟机就会不定时的启动垃圾回收器,把该对象作为垃圾进行回收。
二、面向对象
1、面向对象的三大特性:继承、封装、多态
    继承:通过继承,可以简化类的定义;java只支持单继承,不允许多继承,但一个父类一个被多个子类继承;可以有多层继承,就是说一个类可以继承某个类的子类,如B类继承了A类,C类可以继承B类;子类继承父类的所有成员方法和成员变量,但不能继承父类的构造方法;在子类中,可以使用super()调用父类的构造方法;如果子类中没有显示的调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实力对象时,系统默认调用父类的无参数的构造方法。
    封装:简单地说,就是在定义一个类的成员(变量或方法)时,使用private关键字来修饰,该成员就成了类的私有成员,只能被本类的其他成员调用,而不能被其他类的方法调用。实现封装的目的是,隐藏类的实现细节,让使用者只能通过事先定制好的方法来访问数据;可以方便的加入控制逻辑,限制对属性的不合理操作,便于修改,增强代码的可维护性;可进行数据检查。
    多态:“用同一段代码,却有一两种或多种截然不同的结果”。应用程序不必为每个派生类(子类)编写功能调用,只需对抽象基类进行处理即可;派生类的功能可以被基类的方法或引用变量调用,即向后兼容,可以提高程序的可扩充性和可维护性。多态的两种表现形式有重载和重写。
2、对象的比较:“==”和“equals()”
    “==”用于比较两个引用变量的值是否相等,这个值指的是对象在堆内存中的首地址。引用变量通过这个地址与堆内存中的对象相关联。
    “equals()”用于比较两个对象的内容是否一致。最常用的是字符串的比较。如: "abc".equals("abc");
3、模块设计:强内聚、弱耦合
    强内聚:许多功能尽量在类的内部完成,不让外面干预。
    弱耦合:提供给外部尽量少的方法调用。
    在程序设计中,应尽量避免一个模块直接修改或操作另一个模块的数据,即模块的设计追求强内聚、弱耦合。
4、构造方法
    与类名相同,不含返回值类型,也就是没有返回值,在构造方法中不能使用return语句,构造方法可以被重载。
5、this关键字
    this关键字在方法内部就是这个方法所属的对象的引用变量。每个成员方法内部都有一个this引用变量,指向调用该方法的对象。
    几个必须使用this关键字的情况:
    ①方法的形参名与成员变量名相同,如:
      public String name;
      public Person(String name){
          this.name = name; //使用this关键字区别成员变量和形参。
      }
    ②假设有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造函数方法需要接收一个代表其所在容器的参数。通过this引用把当前的对象作为一个参数传递给其它的方法或构造函数。
      class Container{
          Component comp;
          public void addComponent(){
              comp = new Component(this);//this代表的是当前的Container对象。
          }
      }
      class Component{
          Container myContainer;
          public Component(Container c){
              myContainer = c;
          }
      }
    ③在同一个类中,在某个构造方法中,调用其它构造方法时。
      public Person(String name){
          this.name = name;
      }
      public Person(String name,int age){
          this(name);//使用this关键字调用上面的构造函数。
          this.age = age;
      }
6、垃圾回收策略:“复制式”和“自省式”
    复制式:先将正在运行中的程序暂停,然后把正在被使用的所有对象,从他们的所在堆内存里复制到另一块堆内存中。
    缺点:内存中的内容搬运复制,需要两倍的内存空间,即使没有垃圾或有少量垃圾,回收器仍然会将内容复制,效率低。
    自省式:回收器会检测所有正在使用的对象,并标注。标注完成后将内存中所有处于“不可达状态”(不会再被使用的对象)的对象所占的内存空间一次性释放。
    两种策略的交互:如果程序中的对象长期被使用,java虚拟机(JVM)就转至“自省式”模式,而当大量的垃圾或对象所占的内存不连续性的情况严重时,将转至“复制式”。
    System.gc的作用是,强制启动垃圾回收器。
7、静态:“类的”、static
    在类中使用static关键字修饰的成员被称为类成员。static修饰的变量被称为静态变量,也叫类的属性;static修饰的方法被称为类方法。类成员属于类,不属于类的某个实例对象。
    在使用累的静态方法时,应注意以下几点:
    ①在静态方法里,可以直接调用同类中的其它静态成员,但不能直接访问类中的非静态成员。因为非静态成员属于类的实例对象,须要创建实力对象,才能访问。
    ②静态方法不能以任何方式引用this和super关键字。因为静态方法在使用前不用创建任何实力对象,当静态方法被调用时,this所引用的对象根本就不存在。super同理。
    ③在main()方法中,必须创建该类的实例对象才能通过实例对象去访问类的非静态成员。
    注意:任何方法内的变量都不能声明为静态变量,即任何方法中的变量都不能使用static关键字修饰。
    静态代码块:当类被加载时,静态代码块被执行,且只被执行一次。常用来进行类属性的初始化。
    类加载时机:类在第一次被使用时才被装载,而不是程序启动时就装载程序中所有可能用到的类。
8、单例设计模式
    所谓单例设计模式,就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    设计思路:①将类的构造方法的权限设为private;
             ②在类中定义一个静态的引用变量,用来接收对象;
             ③使用一个返回值类型为该类对象的静态方法取得创建的实力对象
    例:public class Single{
            private Single(){}
            public static Single instance = null;
            public static Single getInstance(){
                if(instance == null){//只有当没有该类的实例对象时,
                    instance = new Single();//对象才被创建。
                }
                return instance;
            }
        }
9、使用javadoc生成注释文档
    命令:javadoc -d -version -author engner.java
    -d:输出文件的目标目录
    -version:版本信息
    -author:作者信息
    engner.java:java源文件
10、对象中成员变量的初始化步骤:
    ①分配成员变量的存储空间,并进行默认初始化;
    ②绑定构造方法参数;
    ③若有this()调用,则调用相应的重载构造方法,被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到第⑥步;
    ④显式或隐式追溯调用父类的构造方法,父类的构造方法又从第②步开始对父类执行这个流程,从父类构造方法结束后,返回当前构造方法继续执行;
    ⑤进行实例变量的显式初始化;
    ⑥执行当前构造方法体中的代码。
11、final关键字
    ①final可用来修饰类、属性、方法;
    ②final修饰的类不能被继承;
    ③final修饰的方法不能被子类重写;
    ④final修饰的变量为常量,只能赋值一次;final修饰的成员变量,必须在声明时或该类的构造方法中显式赋值,然后才能使用。
    ⑤方法中定义的内置类,只能访问该方法内的被final修饰的局部变量;
    ⑥当使用public static final共同修饰常量时,该常量为全局常量,必须在定义时赋值。
12、抽象类和接口
    ①含有抽象方法的类一定是抽象类,抽象类中的方法不一定全都是抽象方法;
    ②接口是抽象方法和常量的定义的集合;
    ③接口中的成员默认用public修饰,常量默认用public static final修饰,所一接口的变量均是全局的;
    ④多个无关的类可以实现同一个接口,一个类也可以实现多个无关的接口,接口还可以多继承。类只能单继承。
13、对象的类型转换
    ①子类对象可以隐式转换为父类对象;
    ②父类对象不能隐式转换为子类对象,需强制转换;
    ③instanceof,用于判断一个类是否实现了某个接口,或判断一个实例对象是否属于某个类。如“对象 instanceof 类”,返回值为boolean。


---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值