【概念笔记】JAVA基础 - part1
IT`huhui前言录
这是自己对JAVA基础的一个小总结,会不断完善。因为时间仓促的原因。
每学习一段时间,停下来,静心总结一下,甚好。停停走,走走停,一往无前,不摔倒。
一些链接里面是我看到一些人理解后写出来很好的文章然后我转载过来的。
原创博文,大家转载的意欲,请附带上以下信息:
来自:IT`huhui的个人博客
作者:胡伟汇
链接: 原文链接
JAVA内存分配机制
stack (栈) 存放局部变量和方法调用
heap (堆) 存放new出来的对象,实例对象的存在于对象所属的heap空间上
data segment(变量区) 静态变量和字符串变量
code segment (代码区) 存放代码
注意区分好局部变量,实例变量,静态变量存放的不同区域。
| 变量 | 生命周期 |
| 静态变量 | 在类被加载时进行初始化,生命周期与类的生命周期相关 |
| 实例变量 | 存放在对象所属的heap空间上,生命周期和实例的对象相关 |
| 局部变量 | 局部变量和方法的参数都被生命在方法当中, 生命周期与方法被放在stack上的时间相关, 就是方法调用执行完毕,则生命周期结束 |
例子:
public class Sample
{
private static c = 3;//静态变量
private int a=1; //实例变量
public void b()
{
int a=2; //局部变量
System.out.println("局部变量:a="+a);
System.out.println("实例变量:a="+this.a);//局部变量的作用域内引用实例变量:this.变量名
}
public static void main(String[] args)
{
new Sample().b();
}
}
局部变量:2
实例变量:1
静态变量:3
附图:

JAVA 的继承
- 只支持单继承,不允许多继承。
- 继承中的构造方法:
- 子类的构造过程中 必须 调用到父类的构造方法。
- 子类可以在自己的构造方法中使用super来调用父类的构造方法。
- 如果使用 this(参数)方法 会调用本类的另外的构造方法。
- 如果调用 super方法 必须在子类构造方法的第一行。
JAVA 多态(动态绑定)
多态:在执行期间 (而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用相对应的方法
多态存在的必要条件
- 有继承(或接口实现)
- 要有重写
- 父类引用指向子类对象
Object 类的 equals
必须是同一个对象才返回true 否则返回 false
String,Date 类等某些类对equals进行了重写,举例,在String中equals对比的是值,但是"=="比较的是内存地址。
子类没有明确些调用父类的构造方法。则系统默认调用父类的无参数构造函数
如果父类没有无参构造函数,子类又没明确调用父类构造方法,编译出错
JAVA 权限控制

JAVA方法的重写和重载
- 方法重写
- 对父类继承来的方法进行重写。
- 重写的方法要与被重写的方法具有相同方法名称,参数列表和返回类型
- 重写方法不能比被重写方法更严格的访问权限
- 方法重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数
值传递原则
基本类型传递的是该数值本身。引用类型传递的是对对象的引用,不是对象本身
异常分类
附图:
throwable
- error 系统本身错误 由虚拟机生成并且抛出
- exception 可以处理的异常 一般需要用户捕获
- runtimeException 用户可以不处理
Collection 容器

List接口(一句话:有顺序,元素可以重复)
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Set接口(一句话:没顺序,元素不可以重复。重复判断标准:相互equals)
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Map接口(一句话,key唯一,value可以重复)
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。总结:
1. 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
3. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
4. equals 的时候hashcode应该相等
5. 容器类对象在调用remove、contains等方法时需要比较对象是否相等。这会涉及到对象类型的equals方法和hashcode方法;对于自定义的类型;需要重写equals和hashcode方法以实现自定义对象的相等规则。
注意,相等的对象应该具有相等的hashcodes。在这里记录下Set和List 用迭代器遍历方法
``` java
//LIST
for(Iterator iter =list.iterator(); iter.hasNext();){
String str=(String )iter.next();System.out.println(str); }
//Set
Set keyset = mapmysql.keySet();
for (Iterator iterator = keyset.iterator();iterator.hasNext();){
int key = (int) iterator.next();
int values = (int) mapmysql.get(key);
}
```
比较器——Comparable
- 实现Comparable,编写compareTo()方法
public Song implements Comparable<Song>{
String title;
String artist;
String rating;
String bpm;
public int compareTo(Song s) {
return title.compareTo(s.getTitle());
}
}
- 另一种sort()方法,取用Comparator参数
- 创建并实现Comparator的内部类。用compare()方法替代了compareTo()方法。
- 调用重载的sort(),传入list和CompareTo的实例。
//这里举个在《Head First Java》里面看到的例子。
public class Jukebox5{
ArrayList<Song> songList = new ArrayList<Song>();
public static void main(String [] args){
new Jukebox5().go();
}
class ArtisCompare implements Comparator<Song>{
public int compare(Song one ,Song two ){
return one.getArtist().compareTo(two.getArtist());
}
}
public void go(){
System.out.println(songList);//排序前
ArtistCompare artistCompare = new ArtistCompare ();
Collection.sort(songList , artistCompare);
System.out.println(songList);//排序后
}
}
数组
区分:
- 数组对象的内存图:

- 数组元素为引用数据类型的内存图

【概念笔记】JAVA基础 - part1的更多相关文章
- 菜鸡的Java笔记 java基础类库 BaseClassLibrary
java基础类库 BaseClassLibrary StringBuffer 类的特点 StringBuffer,StringBuilder,String 类之间的关系 ...
- Java学习笔记——java基础
2020.9.1 学习来自 https://www.liaoxuefeng.com/wiki/1252599548343744/1255883729079552 一.变量和数据类型 基本数据类型 基本 ...
- java学习笔记 --- java基础语法
一.java标识符,关键字,保留字 1.标识符 用来增强程序阅读性自定义的名字.类名,变量名,方法名等都可以被称为标识符 标识符的组成: 1.由数字(0-9),字母(a-z,A-Z),下划线(_),美 ...
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 内容简介: ------------ ...
- 【概念笔记】JAVA基础 - part2
IT`huhiu前言录 这是续JAVA基础 - part1 链接http://www.cnblogs.com/ithuhui/p/5922067.html的. 笔记慢慢在修改和补充 JAVA里面重要的 ...
- JAVA学习笔记之基础概念(一)
一.Java 简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称. 由 James Gosling和同 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
随机推荐
- 0601 Spring2.0 发布会
ProductBacklog:继续向下细化; 1.界面美化,统一界面风格,以简洁美观为主: 2.丰富版面的内容,吸引用户: 3.尝试增加新的版面: Sprint 计划会议:确定此次冲刺要完成的目标 1 ...
- CSS盒子模型学习记录1
http://www.blueidea.com/tech/web/2007/4545.asp 代码试验: html代码: <!DOCTYPE html PUBLIC "-//W3C// ...
- 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
原文出处:http://www.cnblogs.com/jacklu/p/4679304.html 在WDF的PCIe驱动程序中,共有四个.h文件(Public.h Driver.h Device ...
- 2016年 Delphi Roadmap
2016年delphi Roadmap 发布,这也是新公司的第一次发布路线图. 虽然稍微晚点( 原来说是1月份发布路线图),至少比过去积极点.喧嚣多年的靴子终于落地. Linux 的支持终于正式公布. ...
- 测试Python代码
作为程序员,懂得测试,这是必须的职业技能.很遗憾,我以前从未意识到这点,因此经历了很多叫苦不迭的开发生涯.当然了,期望每个人都成为测试高手也是不可能的,但是最基本的单元测试啥的是不惜的,尤其是现在中小 ...
- web测试特别点
1.浏览器的后退按钮 提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理. 检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会 ...
- 搭建java,oracle,plsql开发环境
一:安装jdk和jre; (1)有两种方法:1,从官网网址上安装:2,安装绿色版 (2)配置环境变量 在"系统变量"下进行如下配置: (1)新建->变量名:JAVA_HOME ...
- Ubuntu mongodb 安装和配置
安装 MongoDB sudo apt-get install mongodb sudo apt-get install mongodb 关闭/启动 sudo service mongodb stop ...
- css 透明(transparent)
opacity : .75; //standard css3 style for transparency -moz-opacity : .75; // transparenc ...
- 在Windows上运行Tomcat
一.下载jdk 百度搜索jdk 64位 下载,直接就有链接.或者官网下载 二.下载tomcat http://tomcat.apache.org/ 三.安装jdk并配置环境 安装jdk后进入控制面板- ...