小知识点

  • 所有的程序,都要定义在类里面;
  • 异常 定义方法时,使用 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. oracle根据某个字段的值进行排序

    需求:按照颜色为蓝色.红色.黄色进行排序: order by  case                  when color = '蓝色' then                   1     ...

  2. 匹配字符串中的s开头的单词,并替换

    String s="now it's sping,but today is so cold!"; String a=s.replaceAll("s\\w+",& ...

  3. python练习题-day19

    1.将字符串的时间"2017-10-10 23:40:00"转换为时间戳和时间元组 import time s="2017-10-10 23:40:00" st ...

  4. 记录请求的耗时(拦截器、过滤器、aspect)

    文章前言 记录控制器请求的耗时处理通常有三种实现方式,分别是:过滤器.拦截器.aspect:下文将逐一实现. 1.Filter 过滤器 1.1.方法说明 需要实现 Filter 类,主要涉及三个方法: ...

  5. Vue.js——快速入门Vuex

    一. 什么是Vuex? Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. 上图中绿色虚线包裹起 ...

  6. python continue的应用

    count = 1sum = 0while count < 100: if count == 88: count += 1 continue if count % 2 == 0: sum = s ...

  7. Leetcode: Max Consecutive Ones II(unsolved locked problem)

    Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...

  8. linux 命令 创建 Django 项目 使用路由返回首页界面

    1.安装mysql数据库 2.安装pymysql.pip3 install pymysql 3.首先使用cd 命令进入创建的项目文件夹 4.使用django-admin startproject we ...

  9. SQL- 行转列,多行转多列 - max 函数

    效果如图,把同一个 code, 按 cate 列相同行的进行合并后分两行,把mode 每种类型转换成 列名 ,主要用到了 max 函数,很实用 if exists(select * from temp ...

  10. redux中间件的原理

    前言react已经出来很久了,其生态圈之庞大,一锅炖不下!各种react-xx,已让我们不堪重负,github上随便一个demo,引入的模块至少都是五指之数+.看着头疼,嚼之无味…….在此建议新学者, ...