记录所学到的关于Java Se的一些基础知识

1.对象是通过“属性(成员变量)”和“方法”来分别对应事物所具有的静态属性和动态属性

2.类(Class)是对某一类事物的抽象,对象(Object)为某个类的具体实例(Instance)

3.面向对象的思维:考虑问题里头有哪些类哪些对象,考虑它们应该具有哪些属性和方法,再考虑类和类之间具备了什么关系

4.成员变量和局部变量的区别:

  -1 位于类体中方法体外的为成员变量,方法体内的为局部变量

  -2 在定义成员变量时可对其进行初始化,如果不初始化,java会使用默认的值(0/null)对其初始化;局部变量不会被默认初始化所以必须自己去初始化

5.引用类型占两块内存(new出来的东西在heap中,局部变量位于stack,静态变量和字符串常量在dataseg区)

Person p = new Person("圣诞");

class Person {
    String name = null;

    public Person(String name) {
        this.name = name;
    }
}

  

6.同一类中的每个对象有不同的成员变量存储空间,同一类的每个对象共享该类的方法

7.类名首字母大写,变量名和方法名首字母小写

8.this是指向自身的引用

9.在类中,用static声明的成员变量为静态成员变量,为该类的公用变量,对该类的所有对象来说static成员变量只有一份;用static声明的方法为静态方法,不再针对于某个对象调用而且在静态方法中不能访问非静态变量。(静态变量和静态方法可以不用创建对象就调用(也可通过类名进行调用),非静态变量和方法必须创建对象后才能被调用)

10.java 权限修饰符(对class(除了内部类)的权限只能用public和default。-1.public类可以在任意地方被访问   -2.default类只可以被同一个包内部的类访问)

  类内部 同一个包 子类 任何地方
private      
default(没写修饰符)    
protected  
public

11.继承

  -1 子类构造过程中必须调用父类(基类)的构造方法

  -2 子类在自己的构造方法中使用super(argument_list)来调用父类的构造方法,并且必须写在子类构造方法的第一行;使用this(argument_list)来调用本类的另外的构造          方法

  -3 如果子类构造方法中没有显示调用基类的构造方法系统会默认调用基类的无参数构造方法;若既无显式调用而基类中又无无参数的构造方法则编译出错

 public class Test2 {
     public static void main(String[] args) {
         Person p1 = new Person("A");
         Person p2 = new Person("B", "shanghai");
         Student s1 = new Student("C", "S1");
         Student s2 = new Student("C", "shanghai", "S2");

         System.out.println(p1.info());
         System.out.println(p2.info());
         System.out.println(s1.info());
         System.out.println(s2.info());
     }
 }

 class Person {
     private String name;
     private String location;

     Person(String name) {
         this.name = name;
         location = "beijing";
     }

     //构造方法的重载
     Person(String name, String location) {
         this.name = name;
         this.location = location;
     }

     public String info() {
         return "name: " + name + " location: " + location;
     }
 }

 class Student extends Person {
     private String school;

     Student(String name, String school) {
         //this(argument_list)调用本类的另外的构造方法
         this(name, "beijing", school);
     }

     Student(String n, String l, String school) {
         //super(argument_list)调用父类的构造方法
         super(n, l);
         this.school = school;
     }

     public String info() {
         return super.info() + " school:" + school;
     }
 }

12.对象转型

  -1 一个父类的引用类型变量可以"指向"其子类的对象

  -2 一个父类的引用不可以访问其子类对象新增加的属性和方法

  -3 可用: 对象名 instanceof 类名 来判断该对象是否属于该类或该类的子类

 public class TestCasting {
     public static void main(String[] args) {
         Animal a = new Animal("a");
         Cat c = new Cat("c", "blue");
         Dog d = new Dog("d", "yellow");

         //使用 变量instanceof类 来判断该变量是否属于该类或该类的子类
         System.out.println(a instanceof Animal);
         System.out.println(c instanceof Animal);
         System.out.println(d instanceof Animal);
         System.out.println(a instanceof Cat);

         //一个父类的引用可以指向其子类的对象
         a = new Dog("a_d", "brown");
         System.out.println(a instanceof Animal);
         System.out.println(a instanceof Dog);   //instanceof看的是它实际上是什么东西
         //System.out.println(a.furColor);  //error,一个父类的引用不能访问其子类对象新增加的属性和方法
         System.out.println(a.name);
         //将a从Animal类强转为Dog类
         Dog d1 = (Dog)a;
         System.out.println(d1.furColor);
     }
 }

 class Animal {
     public String name;

     public Animal(String name) {
         this.name = name;
     }
 }

 class Cat extends Animal {
     public String eyeColor;

     public Cat(String name, String eyeColor) {
         super(name);
         this.eyeColor = eyeColor;
     }
 }

 class Dog extends Animal {
     public String furColor;

     public Dog(String name, String furColor) {
         super(name);
         this.furColor = furColor;
     }
 }

13.多态(也叫动态绑定,在执行期间判断所引用对象的实际类型然后根据实际的类型调用其相应的方法)

  多态存在的3个必要条件:1.继承   2.方法重写    3.父类引用指向子类对象

14.抽象类:

  - 含有抽象方法的类必须声明为抽象类

  - 抽象类必须被继承,抽象方法必须被重写,抽象类不能被实例化,抽象方法只需声明不需实现

15.final

   1.final的变量的值不能被改变    2.final方法不能被重写    3.final类不能被继承

16.接口(从本质上讲,接口是一个特殊的抽象类,该类中只包含常量和方法的定义,没有变量也没有方法的实现)

  - 接口的特性

    -1 接口中声明的属性默认为public static final(能且只能是public static final),可省略不写 

    -2 接口中只能定义抽象方法,这些方法同样能且只能是public

    -3 接口可以继承其他接口并添加新的属性和抽象方法  

    -4 接口可以继承接口,类可以继承类,类实现接口 

  - 与继承关系相似,接口与实现类之间存在多态性

 public class Test3 {
     public static void main(String[] args) {
         //接口的实现相当于继承;接口的实现必须有方法的重写;父类引用指向子类对象所以构成多态
         Person c = new Chinese();
         Person a = new American();
         //因此调用的是各自的speak方法
         c.speak();
         a.speak();
     }
 }

 interface Person {
     //默认为 public
     public void speak();
 }

 class Chinese implements Person {
     //实现了接口就必须重写接口中的所有方法
     public void speak() {
         System.out.println("中国人说中国话");
     }
 }

 class American implements Person {
     public void speak() {
         System.out.println("美国人说英文");
     }
 }

Java Se 基础系列(笔记) -- OO的更多相关文章

  1. Java Se 基础系列(笔记) -- Exception && Array

    Exception 1.java 异常是java提供的用于处理程序中错误(指在程序运行的过程中发生的一些异常事件)的一种机制 2.java程序的执行过程中如果发生异常事件则自动生产一个异常类对象,该对 ...

  2. Java Se 基础系列(笔记) -- BasicDataType

    java.lang.String类代表不可变的字符序列 String类常用方法:1.public char charAt(int index); -- 返回下标为index的字符 2.public i ...

  3. Java SE 基础:注释

    Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...

  4. Java SE 基础:标识(zhì)符

    Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...

  5. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  6. Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...

  7. 《写给大忙人看的java se 8》笔记

    现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java ...

  8. Java SE 基础知识(一)

    一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...

  9. [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置

    转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...

随机推荐

  1. CentOS6.4 GOOGLE chrome install

    yum install http://people.centos.org/hughesjr/chromium/6/i386/RPMS/chromium-28.0.1500.45-205727.i686 ...

  2. ubuntu下 使用AB做压力测试

    1最近刚开始接触apache大数据下数据优化,讲一下apache 下ab压力测试工具. 程序“ab”尚未安装. 您可以使用以下命令安装: apt-get install apache2-utils 以 ...

  3. Pycharm在创建py文件时,如何自动添加文件头注释(类似于钩子特性)?

    在每次新建一个py文件的时候 1 如何自动添加/usr/bin/env python2 自动添加 coding=utf8 操作方法: File->settings->Editor-> ...

  4. 文件头 MAGE_FILE_HEADER

    IMAGE_FILE_HEADER这个结构的定义如下: typedef struct _IMAGE_FILE_HEADER { 00h WORD Machine; //运行平台 02h WORD Nu ...

  5. TagHelper

    TagHelper是怎么实现的   众所周知,在asp.net core中编写Razor视图的时候,用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHe ...

  6. JS对undefined,null,NaN判断

    1.判断undefined: <span style="font-size: small;">var tmp = undefined; if (typeof(tmp) ...

  7. 关于nginx架构探究(3)

    Nginx 模块综述 Nginx 所有的代码都是以模块的新式组织的,包括核心模块和功能模块.Nginx加载模块的时候不想Apache一样动态加载,它是直接被编译到二进制执行文件中,所以,如果想要加载新 ...

  8. 将Altium中的原理图与PCB导出为PDF的步骤与方法

    1.通过File-Smart PDF(文件-智能PDF),快捷键F-M打开. 2.选择打印的范围:Current Project还是Current Document,还有生成的PDF的存放位置. 3. ...

  9. Owncloud中文目錄包裹下載

    Owncloud提供私有雲端儲存環境的自由軟體解決方案,目前4.5版中文支援已經很完整,但是早期ZIP壓縮檔內的檔名不支援utf-8,所以使用ZIP格式下載整個目錄或多個檔案時大部分解縮軟體無法正確處 ...

  10. 许多js框架或js库的min版本是怎么做出来的?

    如jQuery,Bootstrap,AngularJs,这些都有min版本,代码更加精简,功能却相同.看了源代码,几乎不可读. 这种事情的工具类型叫做“minifier”.请看传送门:Minifica ...