1.实例变量和类变量

实例变量:指每个对象独立的,修改其中一个对象的实例变量,不会影响其他实例变量的值,变量值无 static 关键字修饰;

类变量:是指所有对象共享的,其中一个对象把该变量的值修改了,那么所有对象的该变量的值都修改了,使用 static 关键字修饰,一般使用 「类名.属性」 来访问;

2.静态方法和非静态方法

静态方法:是指使用 static 关键字修饰修饰的方法,一般使用 「类名.方法」 来访问,也可以通过 「对象.方法」 来访问,但是不建议这样写!静态方法中只能调用静态方法和使用静态成员,因为静态成员和静态方法会随着类的加载而加载,非静态成员或者方法的加载晚于静态的成员和方法,故静态方法不能调用非静态的方法和非静态的成员,即静态的对静态的;

非静态方法:是指没有使用 static 关键字修饰修饰的方法,一般使用 「对象.方法」 来访问,非静态方法中即可调用非静态方法和使用非静态成员也可以调用静态方法和使用静态成员;

3.Java 中包的作用

在 Java 中,包的声明一般写在文件的第一行,使用关键字 package + 包名,其作用有:①避免重名,例如我们有时候在调用某个类的某个方法时会发现会有相同类名的方法,这时候你就要导入你要调用的类所在的包或者使用全类名调用即可,这样避免了重名;②用于权限控制,在同一个包下的类是可以相互调用的,如果调用其他包下的类,就必须要导入调用类所在的包,这样可以避免外部的非法调用,另外还可以合理的使用访问控制权限的关键字 public、protected、private 来进行访问权限的设置(更多各关键字权限控制参考附表1);③划分项目结构层次,使得文件管理更有条理,例如MVC、MVP模式分包;

附表1

4.Java 中的静态导入

静态导入是 JDK1.5 引入的新特性,一般情况下,我们调用某个类中的静态成员或静态方法使用 「类名.属性」 来调用,而静态导入可以把某个类下的静态成员(方法和变量)使用类似导包的方式导入进来,即可以直接导入到类的成员级别(方法和变量),这样可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需使用 「类名.属性」 的方式来调用,直接调用方法名或者属性,像调用自己类中的方法和属性一样简单。

静态导入的语法是:

  • import static 包名.类名.静态成员变量;
  • import static 包名.类名.静态成员函数;

注意导入的是静态成员变量和方法名,另外也可导入某个类下的所有静态成员:

  • import static 包名.类名.*;

*号代表通配所有。

一般情况下我们可以适度的使用静态导入,不建议大量滥用,因为我们知道 Java 是面向对象的语言,使用静态导入调用时,缺少了类名,即弱化了类的描述,有时候我们不知道调用的是哪个类的成员,可能还会思考一番,弱化了面向对象思想,导致类和类之间的调用关系不清晰!

5.Java 中的 this 关键字

在 Java 中,当创建一个对象后,Java 虚拟机就会为其分配一个指向对象本身的指针,这个指针就是 ** this** 。this 的使用场景:①当方法的布局变量和与实例变量重名时,需要使用 this 关键字来区分,如果不重名也可以使用,通常不重名的情况下不写 this;②使用 this.方法名(参数); 来调用类的成员方法,一般情况下不写 this,直接调用;③使用 this(参数1…); 来调用本类中的其他构造方法,例如在 Android 中自定义一个 View,一般都会写 3 个重载的构造方法,单参数的构造方法中使用 this(参数1, 参数2); 来调用双参数的构造方法,双参数的构造方法中调用三个参数的构造方法;④ this 作为参数传递,在 Android 的 Activity 中,经常会使用 this 来作为参数传递;⑤在内部类或者匿名内部类中调用外部类的方法,如果在内部类中使用 this,这里的 this 代表的是当前类本身,即内部类,要想调用外部类中的方法必须使用 外部类名.this.方法名(); 来调用;

另外使用this关键字要注意一下几点:

  • 在构造方法中使用 this 调用另一构造,必须要将调用放在方法的第一句且只能使用一次;
  • 不能再实例方法中使用this 来调用构造,因为实例方法的调用必须要有对象,而对象的创建一定会调用构造方法,构造方法的调用应早于实例方法;
  • 在构造中不能使用 this 来相互调用构造,例如,如果在单参数的构造中调用双参数的构造,在双参数的构造中调用单参数的构造,我们使用单参数的构造来创建一个实例,调用过程为:单参数构造 -> 双参数构造 -> 单参数构造,这样会无穷无尽的调用下去,另外这违背了在一个方法的调用链中只能调用一次同一个参数的构造方法的规则;

6.Java 中的 super 关键字

  • super(); 调用的父类是 Object的无参构造,默认自动调用,一般情况下都省略不写;
  • this 和 super 关键字都是为了解决重名问题的,如果没有重名问题可以省略不写;
  • this 和 super 都可以理解为父类的一个引用,即可以调用父类中的属性和方法;
  • super.方法名(); 表示调用父类的方法;
  • super.属性 表示调用父类中的属性(用的不多);
  • super();调用父类的构造方法;
  • this 和 super 都只能放在方法的第一行,所以不能一起出现;
  • super 只能出现在构造方法中;

在 Java 中,所有类的父类都是 Object,如果一个类没有使用 extends 关键字来继承父类,那么它默认继承的是 Object 类,子类不会继承父类的构造方法,但是一定会调用父类的构造方法,如果没有调用,必须要手动去调用,否则会编译报错;

7.Java 中的重载与重写

重载即 Overload,在同一个类中,方法名相同参数列表不同的几个方法称为重载方法;

重写即 Override,在子父类中,子类与父类方法名称相同,参数列表必须相同;对于返回值类型子类要么和父类的一致,要么是父类返回值类型的子类;对于权限修饰符,子类的权限修饰符要么和父类的相同,要么比父类的权限修饰符更宽泛;如果有异常抛出,子类的异常捕获范围要么和父类的相同要么比父类的异常范围更小,即子类的异常是父类异常的子类;

8.== 与 equals

关系操作符 “==” 生成的是一个boolean结果,它们计算的是操作数的值之间的关系,如果是基本数据类型,它比较的是他们值的本身,如果是引用数据类型,则比较的是对象在内存中的地址;

equals 方法是基类 Object 中的方法,所有类都直接或间接继承于 Object类,因此所有类中都有该方法,如果没有重写 equals() 方法,调用 equals() 方法和使用 == 的效果一样,也是比较的内存中的地址值;在 Java 提供的大多数类中,如 String,Double,Date,Integer等,都对equals 方法进行了重写,用来比较指向的对象所存储的内容是否相等,如果是我们自己的定义的类,如果没有重写 equals 方法,使用 equals 默认比较的是对象在内存中的地址,要比较内容,就必须要重写 equals 方法。

9.对类的理解

类是对一类事物的抽象描述,对象是类的实例,可以理解为类是汽车设计图,对象是实实在在的生产出来的汽车,一张设计图(类)可以生产出来多个汽车(对象),类中包含属性和方法,属性描述了类所具有的特性,方法描述了类的具体功能,这样我们在设计类的时候就会更加注重某个类中的功能及特性,将他们抽象分装到类中,外部在调用的时候不需要关心类中的具体实现,这样就可以更多的考虑类与类之间的相互关系了,这样带来的好处就是可以提高对象的复用性,降低开发难度,多以所Java是面向对象的编程,即Everything is object. 对于面向对象的开发,一般来讲分为三个步骤:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。OOA 即根据具体的功能分析有哪些特性或者方法,OOD 即根据特性和方法抽象设计出具体的类;OOP 即建立类和类之间的相互调用的关联关系。

10.变量、内存和垃圾

变量是内存中的一块存储区域,它的值是变化的,不是固定的;

Java中的内存一般分为Java虚拟机栈和堆内存,栈中一般存放的是基本数据类型和引用类型的引用变量,堆内存中存放的是对象实例,Java堆是 Java 虚拟机所管理的内存中最大的一块,它是被所有线程共享的一块内存区域,在虚拟机启动时创建,可以不是物理上的连续区域,只要逻辑上连续即可;另外还有方法区、静态常量池、程序计数器、本地方法栈等内存分配区域的概念;

垃圾:指的是没有任何引用所指向的对象(一块堆内存空间),这块空间就是垃圾,所有的垃圾都会等待GC(垃圾收集器)不定期的回收(释放内存空间)。

更多干货文章关注我的微信公众号:

这里写图片描述

不得不会的10点Java基础知识的更多相关文章

  1. (10)java基础知识-字符串

    String s和 new String 的区别 String s1="hello"; String s2= new String("hello"); Stri ...

  2. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  3. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  4. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  5. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  6. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  7. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  8. Java 基础知识总结

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

  9. 学习Spring必学的Java基础知识(1)----反射(转)

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

随机推荐

  1. Java 集合类Hashmap

    一.HashMap 简介 HashMap在程序员的开发过程中是一个十分常用的集合类,它是一个以键值对形式存在的集合类, 在开发中我们可以利用的它的一个key存在即替换的特性,实现一个更新的去重的操作. ...

  2. 关系型数据库MySql简介

    什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...

  3. 【题解】跳房子-C++

    Description奶牛按不太传统的方式玩起小朋友玩的跳房子游戏,现给出一个5*%的由数字组成的网格.它们在格子中向前前跳,向后跳,向左跳,向右跳,跳到网格中另一个数字后,又这样继续跳(可能跳到某个 ...

  4. HashSet源码分析:JDK源码系列

    1.简介 继续分析源码,上一篇文章把HashMap的分析完毕.本文开始分析HashSet简单的介绍一下. HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承 ...

  5. [小米OJ] 2. 找出单独出现的数字

    解法一: map 1.45 ms #include <algorithm> #include <bitset> #include <cmath> #include ...

  6. nginx目录穿越漏洞复现

    nginx目录穿越漏洞复现 一.漏洞描述 Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添加如下配置 在如 ...

  7. to_string()函数(C++)

    to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string 函数原型:string to_string (int val);str ...

  8. Jsp机试题 (用户登录用户注册/用户注销功能)

    1. 用户登录 实现用户登录,功能,三个页面登录页面login.jsp,登录逻辑处理页面loginSubmit.jsp,欢迎页面welcome.jsp.用户再登录页面输入用户名和密码,前台页面使用js ...

  9. java相关的一些资源

    http://www.cnblogs.com/best/p/5876559.html#_label1

  10. 通过ping命令了解三层转发流程

    ping命令:因特网包探索器.本文主要通过路由器两端不同网段PC互ping来讲解三层转发流程. 例子:PC-A是如何 ping 通 PC-C 的,有几种情况? 说明:1.在条件1阶段PC-C不会刷新a ...