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==>类集 这是两个最重要部分,这两个部分理解 ...
随机推荐
- haslayout和BFC
感谢CSS涛的分享,参考文章: (1)haslayout:http://aibusy.com/blog/?p=53 (2)BFC 神奇背后的原理:http://aibusy.com/blog/?p=8 ...
- CLR via C#字符串和文本处理
一.字符 在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构(一个值类型) 的一个实例.Sy ...
- C#7.0
C#7.0中有哪些新特性? 以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展 ...
- java8新特性学习
lambda语法 语法组成为三部分:参数列表.箭头符号“->”.代码块 lambda语法的比jdk1.8之前的要通过匿名类实现Runnable接口,代码上要少,而且它支持访问外部变量 strea ...
- 05 - 替换vtkDataObject中的Update方法 VTK 6.0 迁移
VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.下面讨论update方法并提供迁移现有代码的建议. Update() vtkDataObject::Upd ...
- Android实现三级联动下拉框 下拉列表spinner
Android实现(省.市.县)三级联动下拉框 下拉列表spinner 转载请注明出处: http://www.goteny.com/articles/2013/11/46.html http://w ...
- Sicily 1034. Forest
题目地址:1034. Forest 思路: 网上很多说用深搜,很任性.......发现广搜也挺好用的,实验课打的(⊙o⊙)…orz........囧. 先找根结点,根据根结点广搜深度,广搜宽度,不过要 ...
- C++面试问题总结
转自:http://blog.csdn.net/wangtengqiang/article/details/8061806 1.static用法 static 的成员函数和成员变量,可直接通过类名:: ...
- vsftpd,tftp安装配置
一. 对比共同点:都包含ftp不同点:1)vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.你可以通过ftp客户端上传下载软件.可设置访问用户名密码,或匿名anonymous登陆.默认 ...
- Android中ListView异步加载数据
1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...