Java Se 基础系列(笔记) -- OO
记录所学到的关于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的更多相关文章
- Java Se 基础系列(笔记) -- Exception && Array
Exception 1.java 异常是java提供的用于处理程序中错误(指在程序运行的过程中发生的一些异常事件)的一种机制 2.java程序的执行过程中如果发生异常事件则自动生产一个异常类对象,该对 ...
- Java Se 基础系列(笔记) -- BasicDataType
java.lang.String类代表不可变的字符序列 String类常用方法:1.public char charAt(int index); -- 返回下标为index的字符 2.public i ...
- Java SE 基础:注释
Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...
- Java SE 基础:标识(zhì)符
Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...
- Java SE 基础:常用关键字
Java SE 基础:常用关键字 常用关键字表
- Java SE基础知识
Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...
- 《写给大忙人看的java se 8》笔记
现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java ...
- Java SE 基础知识(一)
一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...
- [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...
随机推荐
- 初始化JQuery方法与(function(){})(para)匿名方法介绍
一.初始化JQuery对象 DOM加载完成时运行代码 1.$(document).ready(function(){ 全写 // 在这里写你的代码... }); 2.jQuery(function() ...
- 基于.NET MVC的高性能IOC插件化架构(二)之插件加载原理
上一篇博文简单介绍了下插件化的代码组成部分:http://www.cnblogs.com/gengzhe/p/4390932.html,源码地址:https://github.com/luohuazh ...
- MMDrawerController 使用遇到的问题及定制
MMDrawerController 1,集成UIViewController * leftDrawer = [[UIViewController alloc] init]; UIViewContro ...
- 解决Android ListView 和 ScrollView 共存时冲突 问题 方法其一
转载请注明出处: http://www.goteny.com/articles/2013/11/8.html http://www.cnblogs.com/zjjne/p/3428480.html 当 ...
- c++ primer( 文本查询程序)
读取用户指定的任意文本文件,然后允许用户从该文件查找单词,查询的结果是该单词出现的次数,并列出每次出现所在的行,如果某单词在同一行中多次出现,程序将只显示改行的一次.行号按升序显示(int main( ...
- 输出宽字符数组 C++
std::cout << "ASCII and ANSI" << std::endl;std::wcout << L"INSERT M ...
- TCP粘包的拆包处理
因为TCP是流式处理的,所以包没有边界,必须设计一个包头,里面表示包的长度(一般用字节表示),根据这个来逐个拆包.如果对于发送/接收频率不高的话,一般也就不做拆包处理了,因为不大可能有粘包现象. 以下 ...
- PHP Simple HTML DOM 使用
下载地址:https://github.com/samacs/simple_html_dom 文档地址 http://simplehtmldom.sourceforge.net/ 一直以来使用php解 ...
- Java并发3-多线程面试题
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速. 2) 线程和进程有什 ...
- Android中的ScrollView实现 拖拽反弹效果
public class BounceScrollView extends ScrollView { private View inner;// 孩子View private float y;// 点 ...