不得不会的10点Java基础知识
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基础知识的更多相关文章
- (10)java基础知识-字符串
String s和 new String 的区别 String s1="hello"; String s2= new String("hello"); Stri ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- 学习Spring必学的Java基础知识(1)----反射(转)
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
随机推荐
- 手动部署EJB于WebLogic
转载自http://blog.sina.com.cn/s/blog_678530f60100hy6c.html 说是转载,其实是我个人几年前在新浪博客上发表的一篇文章 上一篇说道如何使用Eclipse ...
- python实现DFA模拟程序(附java实现代码)
DFA(确定的有穷自动机) 一个确定的有穷自动机M是一个五元组: M=(K,∑,f,S,Z) K是一个有穷集,它的每个元素称为一个状态. ∑是一个有穷字母表,它的每一个元素称为一个输入符号,所以也陈∑ ...
- Android studio 3.4.1 使用 bootstrap 中的组件实例
电脑环境: ubuntu18.04 + Android studio 3.4.1 + bootsrtap4 Android studio中板式设计主要使用的 XML 布局文件,而在bootstrap中 ...
- kali linux 常用文件与指令路径
重启网络 : /etc/init.d/networking restart 语言设置文件 : /etc/default/locale apt 安装deb保存目录 : /var/cache/apt/ar ...
- php 中文乱码问题
http://www.jb51.net/article/30064.htm 翻了好多帖子,发现不知道是不是自己脸黑, 文件头这边加上header("Content-Type: text/ht ...
- 个人永久性免费-Excel催化剂功能第23波-非同一般地批量拆分工作表
工作薄的合并,许多Excel插件已有提供,Excel催化剂也提供了最佳的解决方案,另外还有工作薄的拆分和工作表的拆分,同样也是各大插件必备功能. 至于工作薄拆分,那是伪需求,Excel催化剂永远只会带 ...
- Excel催化剂开源第13波-VSTO开发之DataGridView控件几个小坑
Excel催化剂内部大量使用了DataGridView,这其中有一些小坑,花了力气才解决的,在此给广大开发者作简单分享. 为何要使用DataGridView而不是其他控件如ListBox.ListVi ...
- MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!
有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的.即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解. 但是 ...
- 6.2.初识Flutter应用之路由管理
路由管理 路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewC ...
- [leetcode] 51. N-Queens (递归)
递归,经典的八皇后问题. 利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数. 对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行. 遍历过程中,若 ...