记录所学到的关于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. nginx_笔记分享_php-fpm详解

    参考 http://syre.blogbus.com/logs/20092011.htmlhttp://www.mike.org.cn/articles/what-is-cgi-fastcgi-php ...

  2. 高性能Socket组件和RPC,让你像写本地代码一样开发网络应用和分布式程序

    最近想试试C#能不能写出高性能的分布式组件,于是写了一个双工RPC,也当练手,下面是单连接的测试结果,非常给力.机器配置:U:E1230-v2,内存:ddr3-8G 1.递归调用    过程:Clie ...

  3. UIApplication-备用

    iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...

  4. Android监听事件

    ListView事件监听: setOnItemSelectedListener 鼠标滚动时触发 setOnItemClickListener 点击时触发 EditText事件监听: setOnKeyL ...

  5. 『邪恶のWIFI』搭建假冒WIFI热点等女神来蹭网啊 - -。

    pic by baidu 0x 00 ╮(╯▽╰)╭ 请喊我万恶的标题党  哈哈哈哈哈 0x 01 这里正题 虚拟机(Kali)不支持内置网卡,还好我有神器,插上我的RT8187L,开始搞起 参考资料 ...

  6. mysql 查询每个分组前N条记录

    mysql 查询每个分组前N条记录 假设存在表movie,  有字段 id, part(地区), mcount(观看次数) 现查询每个地区观看次数最多的3部movie, 则表 ###id虽未存在gro ...

  7. Unity3d中的Awake()、OnEnable()、Start()等默认函数的执行顺序和生命周期

    Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...

  8. 浅谈C51内存优化

    对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 超过变量128后必须使用compact模式编译,实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 128以上的 ...

  9. 5分钟教你学会JavaScript正则表达式

    正则表达式在实际开发过程中和技术面试过程中的重要性不言而喻,本文仅仅只是教你如何在几分钟之类学会正则表达式,对于它的原理及运行机制不做介绍. 第一:什么是正则 正则表达式是一种用来描述一定数量文本的模 ...

  10. USACO6.4-Wisconsin Squares:搜索

    Wisconsin Squares It's spring in Wisconsin and time to move the yearling calves to the yearling past ...