小知识点

  • 所有的程序,都要定义在类里面;
  • 异常 定义方法时,使用 throws 可以用来捕获方法体内没有捕获的异常,然后以 SomeException 抛出异常
  • java是解释型语言。java虚拟机能实现一次编译多次运行。
  • JDK(java software Development kit 软件开发包),JRE(java Runtime Environment java运行环境)。
  • javac编译java程序,java运行java程序。
  • 一个文件最多有一个public class。
  • java不提供运算符的重载。
  • 建议不要在for 循环体内修改循环变量(也叫循环计数器),否则会增加程序出错的可能性。建议重新定义一个临时变量值,将循环变量值赋值给临时变量;
  • 在static方法中不能访问非static的成员。static方法是指在函数前面加上static限定符,如:public static vooid main(String args[]);public static void print();
  • static 真正的作用是用于区分成员变量、方法、内部类、初始化块这四种成员属于类本身还是属于实例;
  • 类成员不能访问实例成员;
  • static 不能修饰构造器,static 修饰的类成员属于整个类,不属于单个实例;
  • Java 编程中不要使用对象(实例)去调用 static 修饰的成员变量和方法,而是应该使用类去调用 static 修饰的成员变量、方法;
  • this 关键字总是指向调用该方法的对象,static 修饰的方法中不能使用 this 引用;
  • 系统不允许 final 变量重新赋值,子类不允许覆盖父类的 final 方法,final 类不能派生子类;

类:

  • 类可以认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量;
  • 类里各成员(构造器、成员变量field、方法)之间的定义顺序没有任何影响,static修饰的成员不能访问没有static修饰的成员;
  • Java 中属性是 property,指的是一组 settergetter 方法,比如某个类有 age 属性,意味该类包含 setAge()getAge() 两个方法;
  • 修饰符 [public|static|protected] 三者出现其一,[final|abstract] 二者只能出现其一,前面可以和 static 组合使用;
  • 构造方法既不能定义返回值类型,也不能使用 void 声明构造器没有返回值,否则会当成方法处理,就不再是构造器;
  • Java 对象,都是 Object 类的实例,都可以直接调用该类中定义的方法;
  • 子类重写父类方法时,有几个原则:
    • 重写方法不能比被重写方法限制有更严格的访问级别
    • 参数列表必须与被重写方法的相同
    • 返回类型必须与被重写方法的返回类型相同
    • 重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常
    • 不能重写被标识为final的方法

对象引用的理解

Human aPerson = new Human(160);

创建了一个Human类的对象 aPerson。

上面是一个非常简单的表述,但我们有许多细节需要深入:

  • 首先看等号的右侧。new是在内存中为对象开辟空间。具体来说,new是在内存的堆(heap)上为对象开辟空间。这一空间中,保存有对象的数据和方法。
  • 再看等号的左侧。aPerson指代一个Human对象,被称为对象引用(reference)。实际上,aPerson并不是对象本身,而是类似于一个指向对象的指针。aPerson存在于内存的栈(stack)中。
  • 当我们用等号赋值时,是将右侧new在堆中创建对象的地址赋予给对象引用。

这里的内存,指的是JVM (Java Virtual Machine)虚拟出来的Java进程内存空间


public class Demojava {
public static void main(String[] args) {
String name1 = "michael";
String name2 = "michael";
String name3 = new String("michael"); System.out.println("name1: " + name1);
System.out.println("name2: " + name2);
System.out.println("name3: " + name3); System.out.println("name1 equal name2: " + name1.equals(name2));
System.out.println("name1 == name2: " + (name1 == name2));
System.out.println("name1 equal name3: " + name1.equals(name3));
System.out.println("name1 == name3: " + (name1 == name3)); System.out.println("name1 hashcode: " + name1.hashCode());
System.out.println("name2 hashcode: " + name2.hashCode());
System.out.println("name3 hashcode: " + name3.hashCode()); System.out.println("name1 identityhashcode: " + System.identityHashCode(name1));
System.out.println("name2 identityhashcode: " + System.identityHashCode(name2));
System.out.println("name3 identityhashcode: " + System.identityHashCode(name3));
System.out.println("End");
}
} Out:
name1: michael
name2: michael
name3: michael
name1 equal name2: true
name1 == name2: true
name1 equal name3: true
name1 == name3: false
name1 hashcode: 1054337575
name2 hashcode: 1054337575
name3 hashcode: 1054337575
name1 identityhashcode: 366712642
name2 identityhashcode: 366712642
name3 identityhashcode: 1829164700
End

结果分析:

  • String 类重写了 equal 和 hashCode 方法,使他们比较时是依据的对象的值;
  • Object 类原始的的 equal hashCode 方法效果是和 == 比较方式一样,都是依据对象的内存地址进行处理后比较的;
  • identityHashCode 方法是依据的对象的内存地址进行处理后比较的;

相关问题:

参考:

参考

教程

Java 基础知识点小结的更多相关文章

  1. Java基础知识点(四)

    前言:记录Java基础知识点,方便熟悉与掌握. 1.面向对象的"六原则一法则" “六原则一法则”:单一职责原则.开闭原则.依赖倒转原则.里氏替换原则.接口隔离原则.合成聚合复用原则 ...

  2. Java基础知识点(三)

    前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...

  3. Java基础知识点(二)

    前言:Java的基础知识点不能间断. 1.Array和ArrayList的区别 关于Array的用法,参看:http://blog.csdn.net/b_11111/article/details/5 ...

  4. Java基础知识点(一)

    前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...

  5. Java基础知识点总结

    前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...

  6. JAVA基础知识点总结(全集)

    1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...

  7. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  8. Java基础知识点

    以下10点为JAVA 基础知识,后面将足以总结和完善以备面试 数据类型 (包装类,字符串,数组) 异常处理 Java IO和NIO 数据结构 (集合和容器 ) 多线程(并发) 网络通信(协议) 面向对 ...

  9. 如何学习java?Java基础知识点分享

    面对未知的行业,人们的第一反应应该是:拒绝踏入.因为学习真的是一个痛苦的过程.想要真正了解一个行业,熟知一个行业,并熟练掌握某一技术,是真的需要时间和精力的.在学习Java基础知识期间,千锋小编疯狂为 ...

随机推荐

  1. python数据分析算法(决策树2)CART算法

    CART(Classification And Regression Tree),分类回归树,,决策树可以分为ID3算法,C4.5算法,和CART算法.ID3算法,C4.5算法可以生成二叉树或者多叉树 ...

  2. 插值代码17个---MATLAB

    函数名 功能Language 求已知数据点的拉格朗日插值多项式Atken 求已知数据点的艾特肯插值多项式Newton 求已知数据点的均差形式的牛顿插值多项式Newtonforward 求已知数据点的前 ...

  3. redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点

    Redis3.2.0引入了新的quicklist的数据结构做了list的底层存储方案.废弃了原来的两个配置参数, list-max-ziplist-entries list-max-ziplist-v ...

  4. JVM内存问题分析

    JVM运行时数据区: 1.方法区:类信息(类名,访问修饰符.字段描述.方法 描述等).常量.静态变量.即时编译后的class文件等.在GC时用永久代来实现方法区 2.运行时常量池:是方法区的一部分,存 ...

  5. ADB——应用交互

    使用ADB与手机应用交互 应用交互的操作包括:启动应用 / 调起Activity.调起Services.停止Service.发送广播.强行停止应用 基本命令 am <command> 常用 ...

  6. Oracle 10046

    [10046 SQL]conn username/passwordalter session set tracefile_identifier = 'id_10046';alter session s ...

  7. HTMLTESTRunner自动化测试报告增加截图功能

    我们都知道HTMLTESTRunner自动化测试报告,是Unittest单元测试框架报告,那么在做ui测试的时候就有点不适用了. 我们需要出错截图功能. 以下是我改的,增加了截图功能,先展示界面,再展 ...

  8. linux文件与目录的创建

    在Linux初期的学习中,是我们对基础命令的掌握,首先我们学习文件与目录的创建,分别有一些命令与选项,我们依次来看: 1:在Linux系统中,一切服务皆以文件的形式表现,脚本文件,服务配置文件,记事本 ...

  9. vue组件弹窗

    定义弹窗组件 先写一个普通的vue组件,其显示的内容就是弹窗的内容. 文件的位置 /src/views/toast/toast.vue <template> <div class=& ...

  10. CentOS7中GreVPN的配置

    目前只实现了三层的GRE隧道,但其实二层也可以实现的,但是没有找到很好的方法,待研究 环境如下: host A :  121.207.22.123 host B: 111.2.33.28 1. 在ho ...