HeadFirstJava

HeadFirstJavajava执行过程的来龙去脉源代码——编译器——输出——java虚拟机扩展名为.java——扩展名为.class不要直接用类名点变量来改变属性值,一般都用get、set方法。封装的基本原则:将你

大家好,又见面了,我是你们的朋友全栈君。

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://javaforall.net/155107.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 水流量霍尔传感器工作原理_51单片机温度传感器

    水流量霍尔传感器工作原理_51单片机温度传感器硬件准备(1)YF-B1流量传感器一个(2)51开发板一个基础知识(1)YF-B1流量传感器只有三根线。即数据线、VCC、GND。数据线输出为占空比为50%的方波。当水流通过水流转子组件时,磁性转子转动并且转速随着流量的变化而成线性变化。霍尔传感器(霍尔元件采样)输出相应的脉冲信号。其流量脉冲特性计算公式为:脉冲f(Hz)=8.1x流量Q(L/min)-3。(2)51单片机的中断…

    2022年9月29日
    3
  • 对贝叶斯理解以及解释贝叶斯函数「建议收藏」

    对贝叶斯理解以及解释贝叶斯函数「建议收藏」贝叶斯

    2022年5月7日
    69
  • python为什么叫爬虫_python根据句柄进行点击

    python为什么叫爬虫_python根据句柄进行点击Pywin32是一个Python库,为python提供访问WindowsAPI的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。1.通过类名和标题查找窗口句柄,并获得窗口位置和大小importwin32guiimportwin32apiclassname=”MozillaWindowClass”titlename=”百度一下,你就知道-MozillaFire…

    2022年10月11日
    3
  • Android手机以L2TP方式连接LAVAVPN的设置方法

    Android手机以L2TP方式连接LAVAVPN的设置方法1.准备首先手机要打开WIFI或GPRS或3G连接,确保网络畅通。建议用WIFI网络测试,因为部分地区的GPRS或3G网络不支持或屏蔽VPN通讯。2.打开手机主菜单,选择"设置"3

    2022年7月2日
    35
  • jQuery+CSS3文字跑马灯特效

    jQuery+CSS3文字跑马灯特效是一款将跑马灯背景制作为3D立方体效果,文字在上面移动时,就像是文字投影到墙壁上,在转角出会改变运动方向。效果展示 http://hovertree.co

    2021年12月27日
    41
  • 黑盒测试的测试方法有哪些_黑盒测试包含哪些测试内容

    黑盒测试的测试方法有哪些_黑盒测试包含哪些测试内容一般我们在做软件测试的时候,会遇到黑盒测试,白盒测试,我们今天主要说的是黑盒测试的主要测试方法有那些。接下来就是干货了。最常见的是  边界值 等价类 错误推测法 场景法 因果图法判定表组成法 正交实验设计 下面是详细的解释:前言:在期末考到来的时候复习下黑盒测试。文章copy&paste了很多别人的东西。文章里有很多不足之处。欢迎拍砖!!!!!

    2022年10月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号