Java基础之五、Java编程思想(1-7)
一、对象导论
1:多态的可互换对象
面向对象程序设计语言使用了后期绑定的概念。
当向对象发送消息时,被调用的代码直到运行时才能确定。也叫动态绑定。
2:单根继承结构
所有的类最终都继承自单一的基类,这个终极基类的名字就是Object
3:对象的创建和生命期
对象的数据处于作用域,Java完全采用了动态内存分配方式(基本类型只是一种特例)
二、一切都是对象
1:基本类型
基本类型是一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中
2:Java中的数组
Java确保数组会被初始化。而且不能在它的范围之外被访问
3:作用域(scope)
Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外
{
String s = new String("a string"); } // End of scope
引用 s
在作用域终点就消失了。然而,s
指向的 String 对象仍继续占据内存空间
import 关键字
指示编译器导入一个包,也就是一个类库,Java中所有的代码都必须写在类里。特定类 java.lang
会被自动导入到每一个Java文件中。
5:static 关键字
- 只想为某一特定域分配单一存储空间,而不去考虑空间要创建多少对象,甚至根本就不创建任何对象。
- 希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。
static
作用于字段时,会改变数据的创建方式static
方法的一个重要用法就是在不创建任何对象的前提下就可以调用它;static
方法就是没有this
的方法,不能直接调用非静态方法,但可以传递一个对象引用到静态方法里,然后通过这个引用(和this
效果相同)来调用非静态方法和访问非静态数据成员。。
三、关系操作符
1:==
和 !=
比较的是对象的引用
2:特殊方法equals()
的默认行为也是比较引用
四、控制执行流程
1:if else
2:switch
JDK1.7开始,switch开始支持String作为选择因子。在switch语句中,String的比较用的是String.equals()
。
因此,需要注意,传给switch的String变量不能为null,同时switch的case子句中使用的字符串也不能为null
五、初始化与清理
1:方法重载
重载方法,方法名相同,形式参数列表不同(参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同)
2:重载约束
- 声明为final的方法不能被重载
- 声明为static的方法不能重载,但是能够被再次声明。
- 重载方法的返回类型可以相同也可以不同,但仅返回类型不同不足以成为方法的重载。
class Animal {
public static void walk() { System.out.println("Animal行走方法"); }
}
public class Horse extends Animal {
public void walk(String s) {
System.out.println("Horse四条腿行走");
}
public static void main(String [] args) {
new Horse().walk("");
}
}
class Animal {
public static void walk() { System.out.println("Animal行走方法"); }
}
public class Horse extends Animal {
public static void walk() { //重新定义
System.out.println("Horse四条腿行走");
}
public static void main(String [] args) {
new Horse().walk();
}
}
3:成员初始化
有变量在使用前都能得到恰当的初始化。
Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化
自动初始化的进行,它将在构造器被调用之前发生
成员变量是基本类型,Java会自动初始化初值;
成员变量是引用类型,Java会自动初始化初值null;
4:对象的创建过程
类加载检查-->分配内存-->初始化零值-->设置对象头-->执行成员变量的初始化-->执行init方法,执行构造方法
5:数组初始化
初始化:
int[] a = new int[3];
初始化各元素值为0
,对于boolean
,初始值为false
;int[] a = {1, 2, 3};
初始化元素分别为1, 2, 3
;
六、访问权限控制
- 同一个.java文件,只能有一个与文件同名的public类,可以有其它非public类;
- 同一个package内的不同文件中的类,可以互相访问。
- 不同package中的类,如需访问,需要使用全限定名,如biz.superalloy.MyClass或通过import把biz.superalloy包引进来;
- default有时候也称friendly,它是针对本包访问而设计的
- 类中的成员变量,不声明访问修饰符时,为“包访问权限”,有时也表示friendly,同一个文件的不同类之间可以互相访问。
- 如果没能为类访问权限指定一个访问修饰符,它将会默认得到包访问权限。
- 1. public修饰符具有最大的访问权限,可以访问任何一个CLASSPATH下的类,接口、异常等。它往往对于对外的情况,也就是对象或类对外的一种接口形式。
- 2. default有时候也称friendly,它是针对本包访问而设计的,任何处于本包下的类,接口,异常等,都可以互相访问,即使是父类没有用protected修饰的成员也可以。
- 3. protected修饰符它的主要作用就是保护子类的。它的含义在于子类可以使用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
- 4. private修饰符它的访问权限仅限于类的内部,是一种封装(Java的三大特点之一,继承,封装和多态)的体现。
七、复用类
1:@Override注解-它的作用是告诉编译器我想重写这个方法,避免不必要的异常
2:final关键字-使用到final的三种情况:数据、方法和类
- final 基本类型,数据编译期常量在定义(声明)时必须对其赋值(声明时也可以不赋(此时叫空白final),但必须在构造器中赋值,所以final域在使用前总是被初始化)。
- final常量常与
static
一起使用,强调只有一份。 - final 对象引用
- final参数这一特性主要用来向匿名内部类传递数据
- final方法-锁定方法,以防任何继承类修改它的含义。这是出于设计的考虑;
- 类中所有的
private
方法都隐式地指定为是final
的。由于无法取用private
方法,所以也就无法覆盖它 - final类不希望它有子类。因为final类禁止继承,所以final类中所有的方法都隐式指定为是final的,因为无法覆盖它们
3:初始化及类的加载
类的代码在初次使用时才加载,通常是指加载发生于构造类的第一个对象之时,但是当访问static域或static方法时,也会发生加载
(构造器也是static方法,尽管static关键字并没有地写出来。因此更准确地讲,++类是在其任何static成员被访问时加载的++。)
4:初始化
初次使用之处也是staic初始化发生之处
Java基础之五、Java编程思想(1-7)的更多相关文章
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- java基础-学java util类库总结
JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...
- java基础(二)-----java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java基础技术-Java其他主题【面试】
Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...
- 黑马程序员:Java基础总结----java注解
黑马程序员:Java基础总结 java注解 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...
- Java基础:Java的四种引用
在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...
- Java基础-使用JAVA代码剖析MD5算法实现过程
Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- JAVA面向接口的编程思想与具体实现
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的. 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...
- java基础知识——网络编程、IO流
IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...
随机推荐
- Doxygen -- part 2
Documenting the code 这个章节涵盖两个主题: 如何在你的代码中放置注释, 一遍doxygen可以在生成的文档中囊括它们. 如何组织一个注释块的内容, 以使得输出美观. 特殊注释块 ...
- 华硕win10U盘重装系统进入pe
1.先要制作一个U盘的PE启动盘,建议使用WIN8 PE 2.将制作好的PE启动盘接上电脑,开机按F2键进入BIOS ,先将[Secure]菜单下[Secure Boot Control]选项设置为[ ...
- 深入了解Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- divide and conquer - 最大连续子序列 - py
以HDU1231为例,代码之没法交如下: inf = 0x3f3f3f3f a = [0 for i in range(10005)] ans, L, R = -inf, 0, 0 def divid ...
- Message: 'chromedriver' executable needs to be available in the path.
环境:windows10 python:3.7.3 已经把 executable.exe 添加到了环境变量中,但还是会提示以上错误. 解决办法: from selenium import webdri ...
- Docker应用部署实录(包含完善Docker安装步骤)
Docker应用部署实录(包含完善Docker安装步骤) 前言 首先说一下这篇文章的来源.我之前接手的一个IOT项目,需要安装多个中控服务器.中控服务器需要安装RabbitMQ,Mysql,多个服务, ...
- 4..部署场景2:带有遗留的Linux Bridge
此场景描述了使用Linux bridge的ML2插件实现OpenStack网络服务的遗留(基本)实现. 遗留实现通过为常规(非特权)用户提供一种方法来管理一个项目中的虚拟网络,并包含以下组件:提供了自 ...
- 数百个 HT 工业互联网 2D 3D 可视化应用案例分享 - 2019 篇
继<分享数百个 HT 工业互联网 2D 3D 可视化应用案例>2018 篇,图扑软件定义 2018 为国内工业互联网可视化的元年后,2019 年里我们与各行业客户进行了更深度合作,拓展了H ...
- java11类和对象
import java.util.Scanner; public class jh_01_如何认识事物 { public static void main(String[] args) { Scann ...
- redis命令总结与持久化
上篇redis文章为大家介绍了redis与它的部署工作.这次我们来说一下redis的操作命令与持久化 一.命令总结 1)String操作 6379> set k1 v1 #设定值 6379> ...