java执行过程的来龙去脉

源代码——编译器——输出——java虚拟机

扩展名为.java ——扩展名为.class

不要直接用类名点变量来改变属性值,一般都用get、set方法。封装的基本原则:将你的实例变量标记为私有,并提供公有的getter与setter来控制存取动作。

实例变量永远都会有默认值,如果你没有明确的赋值给实例变量,或者没有调用setter,实例变量还是会有值的。

integer  0

float    0.0

boolean false

reference null

局部变量没有默认值,如果在变量被初始化前就要使用的话,编译器会显示错误。

(实例变量是声明在类内而不是方法中,局部变量是声明在方法中的)

面向对象思考就是要关注程序中出现的事物而不是过程。

将String类型转换为int类型: Integer.parseInt("3");

ArrayList

add,remove,contains,isEmpty,indexOf,size,get

c.getClass() ——告诉你此对象是从哪里别初始化的

c.hashCode() ——列出此对象的哈希代码,可以把它想成是唯一的一个ID

任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管它原来是什么。且编译器无法将此对象识别为Object以外的事物。如果非要将Object类型转换为某个具体类型,可以用到强制类型转换,比如

Dog d = (Dog) object;//确定是一个Dog对象

if (object instanceof Dog){

Dog d = (Dog) object;

}//如果不能确定,可以用instance of 运算符检查。

Java的接口就好像是100%的纯抽象类(public abstract),所有接口的方法都是抽象的,所以任何Pet的类都必须要实现这些方法。

如何判断应该是设计类、子类、抽象类或接口呢?

1)如果新的类无法对其他的类通过 IS - A 测试时,就设计不继承其他类的类;

2)只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类

3)当你需要定义一群子类的模板,又不想让程序员初始化此模板时,设计出抽象的类给它们用

4)如果想要定义出类可以扮演的角色,使用接口

要点:

1)如果不想让某个类被初始化,就以abstract这个关键词将它标记为抽象的;

2)抽象的类可以带抽象和非抽象的方法;

3)如果类带有抽象的方法,则此类必定标识为抽象的;

4)抽象的方法没有内容,它的声明是以分号结束的;

5)抽象的方法必须在具体的类中运行;

6)Java所有的类都是Object直接或间接的子类;

7)方法可以声明Object的参数或返回类型;

8)不管实际上所引用的对象是什么类型,只有在引用变量的类型就是带有某方法的类型时才能调用该方法;

9)Object引用变量在没有类型转换的情况下不能赋值给其他的类型,若堆上的对象类型与所要转换的类型不兼容,则此转换会在执行期产生异常;

10)java不允许多继承;

11)实现某个接口的类必须实现它所有的方法,因为这些方法都是public与abstract的;

12)要从子类调用父类的方法可以用super这个关键词来引用。

堆与栈要点:

1)我们关心栈与堆这两种内存空间;

2)实例变量是声明在类中方法之外的地方;

3)局部变量是声明在方法或方法参数上;

4)所有局部变量都存在于栈上相对应的堆栈块中;

5)对象引用变量与primitive主数据类型变量都是放在栈上;

6)不管实例变量还是局部变量,对象本身都会在堆上

构造函数要点

1)构造函数不会被继承;

2)实例变量保存在所属的对象中,位于堆上;

3)如果实例变量是个对对象的引用,则引用与对象都是在堆上;

4)构造函数是个会在新建对象的时候执行程序代码;

5)构造函数必须与类同名且没有返回对象;

6)可以用构造函数来初始化创建对象的状态;

7)最好能有无参的构造函数让人可以选择使用默认值;

8)构造函数可以是公有、私有或不指定的

9)静态方法是不能调用非静态的变量,也不能调用非静态的方法

10)静态变量是在类被加载时初始化的

11)一个被标记为final的变量代表它一旦被初始化之后就不会改动,也就是说类加载之后静态final变量就一直会维持原值。

12)final的变量代表你不能改变它的值,final的method代表你不能覆盖掉该method,final的类代表你不能继承该类(也就是创建它的子类)

序列化——将对象的状态信息转换为可以存储或传输的形式的过程。

对象的序列化要点

1)可以通过序列化来存储对象的状态

2)对象必须实现序列化这个接口才能被序列化。如果父类实现序列化,则子类也就自动实现

3)当对象被序列化时,整个对象版图都会被序列化,这代表它的实例变量所引用的对象也会被序列化

4)除非该实例变量被标记为transient,否则,该变量在还原的时候会被赋予null或原始数据类型的默认值

如何启动新的线程?

1)建立Runnable对象(线程的任务)

Runnable threadJob = new MyRunnable();

2)建立Thread对象(执行工人)并赋值Runnable(任务)

Thread myThread = new Thread(threadJob);

3)启动Thread

myThread.start();

对于Thread而言,它是一个工人,而Runnable就是这个工人的工作。Runnable带有会放在执行空间的第一项,方法:run()。

synchronized关键词代表线程需要一把钥匙来存取被同步化(synchronized)过的线程。要保护数据,就把作用在数据上的方法给同步化。

TreeSet:以有序状态保持并可预防重复

HashMap:可用成对的name/value来保存与取出

LinkedList:针对经常插入或删除中间元素所设计的高效率集合

HashSet:防止重复的集合,可快速地寻找相符的元素

LinkedHashMap:类似HashMap,但可记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序。

如果把字符串放进Treeset而不是ArrayList,这些string会自动地按照字母顺序排在正确的位置。

Collections.sort(list);会把list中的stirng按照字母排序。

public <T extends Animal> void takeThing(ArrayList<T> list);//可以使用任何一种Animal的ArrayList

public void takeThing(ArrayList <Animal> list);//只能使用Animal的ArrayList

万用字符<?>

在方法参数中使用万用字符时,编译器会阻止任何可能破坏引用参数所指集合的行为。你能调用list中任何元素的方法,但是不能加入元素。

转载于:https://www.cnblogs.com/jingmengxintang/p/7275213.html

HeadFirstJava相关推荐

  1. headfirstjava最新版本下载_读过HeadFirstJava的大神进来看看

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 线程一章有个聊天程序,我运行之后客户端没将服务器的内容显示在JTextArea中,求解答 客户端程序 import javax.swing.*; impo ...

  2. 基于ssm整合的网上书城

    基于ssm整合的网上书城 采用当前最流行的框架Spring-SpringMVC-MyBatis设计,分为前后台,前台用户可以购买书籍,后台管理员可以对书籍进行分类,增删改查 注意:本系统不支持jdk1 ...

  3. Java技术进阶推荐书单

    1.启蒙篇 首先推荐的两本书是Java核心技术,这一套书是获得了第十三届Jolt生成效率大奖,大学的时候几乎是计算机学院的学生爱好Java编程的都会买这两本书进行扫盲.而且这两本书会随着JDK的版本迭 ...

  4. java基础-head first java

    1.问:其他程序语言都可以用整数类型做判断条件,java可以这样吗? int x = 1; while(x){} 答:不行,java中的integer与boolean两种类型并不相容.只能用如下的bo ...

  5. Head First Java学习笔记(17):包、jar存档文件和部署

    Java的部署 Java程序是由一组类所组成的,那就是开发过程的输出. 部署的选择: 1.本机:整个程序都在用户的计算机上以独立.可携的GUI执行,并以可执行的Jar来部署. 2.两种之间的组合:应用 ...

  6. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  7. how2j学习笔记(JAVA基础)

    文章目录 学习的十点建议 常见的问题及解答 main()有什么作用? 类与对象有什么联系? 我可不可以忽略返回值? next和nextline有啥区别? 编译器和虚拟机有啥关系? ==与equals( ...

  8. 每天一本书 | Head First Java 中文版 【第13本】

    编者荐语: 大家好,我是你们的朋友 朋哥. 最近有一个初学Java的朋友说学习Java很难,不知道怎么入手. 买书也不知道买什么书籍,买了很多看不懂的书籍,也没有任何作用,今天推荐一本适合初学者学习的 ...

  9. java学习笔记 head first java

    文章目录 golang to java Head First Java final 一些与众不同的设计 staic初始化 primitive类型的包装 format 静态的import 内部类 常用包 ...

最新文章

  1. uncompressing linux .................................................后没反应解决办法
  2. vue.js - advance - render 函数小抄
  3. 0基础学python-零基础直接学习Python入门IT合适吗?
  4. jquery 二级导航
  5. 关于form/input 的autocomplete=off属性
  6. 流媒体的未来——视频技术如何演变
  7. TCP通过带外数据实现心跳检测机制
  8. 反射 字段_巧用 Protobuf 反射来优化代码,拒做 PB Boy
  9. 跟我学Android之二 第一个程序
  10. android javap命令生成自定义类签名
  11. RAID 0/1/5/6/00/(10/01)/50/60磁盘阵列逻辑容量计算公式
  12. 为MP3做一个英语词典
  13. 苹果笔记本什么系统_怎么把苹果笔记本系统改为win7系统?
  14. 综合日语第一册第八课
  15. Excel如何在同一单元格内同时添加公式和字符?
  16. 华为自带邮箱下载_华为用户进来看!微信主题气泡教程!怎么在微信里面设置气泡主题?...
  17. WEB前端学习笔记-HTML
  18. 不干胶标签的印刷工艺
  19. 不收版面费的学报汇总,欢迎补充!
  20. 完美型性格的优势和不足,完美型人格的职业发展

热门文章

  1. Mac程序开机启动项优化
  2. win10安装马上6卡在icon.ico的一种解决方案
  3. 谷歌浏览器截图_【插件推荐】一键滚动截图整个网页,支持二次编辑的免费工具...
  4. Oracle P6培训系列:12进度计算
  5. ABBYY最新版本OCR文字图像识别软件v16
  6. 人工智能十大流行算法,通俗易懂讲明白
  7. 黑客入侵电脑网络四大步骤全面曝光
  8. Scratch2exe-ch将sb2文件转换为exe文件
  9. 抖音矩阵号系统搭建及开发思路分享丨抖音短视频关键词优化
  10. 手机远程控制软件和开源框架