java基础笔记(2)
java中成员变量是有默认初始值的,而局部变量是没有的;
构造方法名和类名相同,没有返回值,即结构如下:public 构造方法名();
实例化类的本质就是调用了类的构造方法;
如果自定义了构造方法,就不会调用默认的构造方法了,即便你自己自定义的方法是有参数,而实例化时没带参数,它也不会去调用默认的无参构造方法,而是提示错误;同样的,构造方法也可以重载,实例化时根据赋予的参数对应选择;
每个类都可以实例化多个对象,每个对象都有自己的成员,相互独立,而static修饰的成员为静态成员或类成员,即它属于整个类所有,而不是特定的某个对象;访问时可以使用对象和类名进行访问,鉴于它的作用更加推荐是使用类名;
同样的,static也可以用来修饰方法,且被static修饰的方法可以之间调用同类中的static属性或方法,而要调用非static属性或方法时,需要通过对象名来实现;
而普通方法是可以直接调用同类的属性;
在类的声明中,可以存在多个初始化块,如果有static修饰则表示为静态初始化块,和普通的区别就是普通的初始化块在实例化成对象时都会进行一次初始化,而静态初始化块只会进行一次初始化,且在第一次执行顺序上是先执行静态初始化块然后再初始化块最后才是构造函数;
访问控制符:
private:同类
没声明:同类、同包
protected:同类、同包、子包
public:全部
内部类:内部类可以使用外部类的方法和变量,即使该变量的访问控制符是private,而外部类不能直接使用内部类的方法和变量,而要通过实例化对象;
内部类的实例化对象也不能直接去new一个内部类对象,而应该想外部类类型 变量名 = new 外部类名()后,再通过 内部类类型 变量名2 = 变量名.new 内部类名()实现;
如内外部类有相同的变量名,内部类默认调用的是自身的变量,如要调用外部类的同名变量,需使用外部名.this.变量名来实现调用;
静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 ;
如内外部类有相同的变量名,内部类默认调用的是自身的变量,如要调用外部类的同名变量,需使用外部名.变量名来实现调用;
静态内部类的实例化可直接通过:内部类 对象名= new 内部类()来实现;
方法内部类:定义在方法里的内部类,不能在方法以外的地方使用,因此是不需要访问控制符合static修饰符的;
可以在方法内实例化对象,通过正常的内部类 对象名= new 内部类()来实现;
继承的初始化顺序:先初始化父类对象,后再初始化子类对象,而在对象内,是先初始化属性,后再初始化构造方法里面的属性;
final关键字:类不能被继承,方法不能被覆盖、重写,属性的值不能被修改,且声明时没被赋值时会报错,即等同于常量;
子类的构造方法会隐式地存在super()这个方法,即在实现子类的构造方法时会先实现父类的构造方法;
如果子类没有显式的父类构造方法,而父类又没有无参的构造方法,则编译会错;
子类可以通过super.xxx来调用父类的属性或方法 ;
Object类:所有类的父类,没有标明继承哪个类的类,其父类默认就是object类;
object类里面的toString()方法:当我们直接输出某个对象时,会自动调用改方法,返回的是对象在内存的地址,如需求是要返回对象的属性及方法,则需要重写toString()方法;
equals()方法:比较对象的引用是否相同,即判断是否指向同一块内存地址;在实例化对象时,其实就是把对象存在的内存地址赋给了某个变量名,通过变量名找到该对象地址,进而操控对象;即实例化两个对象通过equals来比较,其结果是不相等的,因为其内存地址是不一样的;可以通过重写equals来使得其比较的是两个对象的属性、属性值是否相等;
与==符号的区别是,==可以表示判断基本数据类型是否相等,而对于引用对象类型同样也是判断内存地址,而equals是不可以用来判断基本数据类型的,在没重写时比较的也是其内存地址是否一样;
引用多态:父类的引用可以指向本类以及子类的对象
方法多态:当父类引用子类时,如果子类有重写父类的方法,那么是可以调用到子类的方法的,当然,如果是父类本身就没有的方法,那么就没法调用子类独有的方法了;
向上向下类型转换,向上没问题,向下需强制,且需判断是否类型属于包含关系,可通过instanceof进行判断;看下面例子帮助理解:
Dog和Cat是Animal的子类;

抽象类:abstract定义抽象类;用来约束子类,父类只需表明方法即可,无需实现,即可以没有方法体,抽象方法没有方法体时以分号做结尾;子类是需要重写实现父类定义的方法;
如果有的方法有abstract修饰符,那么该方法所在的类是一定也要有abstract修饰符的;
注意类添加abstract修饰符的 顺序为 abstract class;
接口:定义了某一批类所要遵循的规范,规定这类类必需提供的方法;因此接口的属性是常量,即默认添加public static final修饰符,方法默认添加public abstract修饰符


接口的引用:可以通过指向实现接口的对象引用接口,也可以直接new 接口名(){方法}.方法来引用接口(匿名内部类),如:
SmartPhone类实现了IPlayGame接口,并定义了palyGame()方法:

匿名内部类:

通过页面和程序进行交互:

java基础笔记(2)的更多相关文章
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- Java基础笔记1
java (开源,跨操作系统)j2ee jre java基础 javaoop java高级 JDK(JAVA developer Kitool): java开发工具 (开发人员使用) JRE(java ...
- Java基础笔记(一)——JDK、JRE、JVM
JDK.JRE和JVM三者的关系 Java程序执行过程 JVM(java virtual machine) 注:由于各种操作系统(windows.linux等)支持的指令集(二进制可执行代码)不同,程 ...
- Java基础笔记05-06-07-08
五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java基础笔记(一)
本文主要是我在看<疯狂Java讲义>时的读书笔记,阅读的比较仓促,就用 markdown 写了个概要. 第一章 Java概述 Java SE:(Java Platform, Standar ...
- JAVA基础笔记10-11-12-13-14
十.今日内容介绍 1.继承 2.抽象类 3.综合案例---员工类系列定义 01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在J ...
随机推荐
- 【NOIP2014模拟8.25】地砖铺设
题目 在游戏厅大赚了一笔的Randy 终于赢到了他想要的家具.乘此机会,他想把自己的房间好好整理一 下. 在百货公司,可以买到各种各样正方形的地砖,为了美观起见,Randy 不希望同样颜色的正方形地 ...
- JAVA批量文件下载
1,看看我们封装的方法 方法中有三个参数:视频url,文件夹路径,视频名称. 调用方法进行下载. 2,看看结果 打印结果 文件夹下的视频下载成功 详细的参数配置可以参考我写的这篇文章:http://b ...
- UML——用例视图
用例视图中交互功能部分被称为用例. 参与者 作为外部用户与系统发生交互作用,这是参与者的特征. 在系统的实际运作中,一个实际用户可能对应系统的多个参与者.不同的用户也可以只对应于一个参与者,从 ...
- MongoDB操作:flush()
flush() 是把缓冲区的数据强行输出,(注意不要和frush()刷新混淆了). 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当 ...
- 自定义springmvc参数解析器
实现spring HandlerMethodArgumentResolver接口 通过使用@JsonArg自定义注解来解析json数据(通过fastjson的jsonPath),支持多个参数(@Req ...
- Zookeeper选举机制(转)
源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...
- shift、unshift、 push、pop用法
shift()定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法:arrayObject.shift() 返回值:数组原来的第一个元素的值. 说明:如果数组 ...
- springboot+druid+mybatis-Plus 配置详解
网上找了很多关于springboot+druid+mybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案.折腾了好几天终于自己配置通过了. springboot的pom文件 <pa ...
- @清晰掉 C++ 中的 enum 结构在内存中是怎么存储的?
C++ 中的 enum 结构在内存中是怎么存储的? C++ C++ 中的 enum 结构在内存中是怎么存储的?里面存储的是常量值吗? 关于占用内存的大小,enum类型本身是不占内存的,编译器直接 ...
- k8s 添加ingress 暴露服务
vim file.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: pgadmin labels: k8s-app: ...