Java系列--总纲
入门的水平要求
- 注释
行注释,多行注释,文档注释。 - Java编码规范
- Java关键字和保留字
- 8种基本数据类型和4种引用数据类型
byte,boolean,char,int,short,long,float,double,
类,接口,数组,null
基本数据类型所占字节数
long,float要加后缀 l,f
引用类型包括四种,不仅仅是类。 - 理解常量和变量
- 二,八,十,十六进制的相互转换
二进制数以“0b or 0B”开头,八进制数以“0”开头,十六进制数以“0x or 0X”开头
存储单位的换算:bit,b,k,M,G,T,P,E,Z,Y,B,N,D
- 原码,反码,补码
- ASCLL编码,UTF-8编码,Unicode编码
ascll中:英文字母占一个字节,中文占两个字节
UTF-8:一个英文字符占一个字节,一个中文(含繁体)占三个字节
Unicode:一个英文占两个字节,一个中文(含繁体)占两个字节。 - 基本数据类型转换(自动转换和强制转换)
- 运算符
比较难的就是理解位运算及其作用 - if语句和switch语句
1、if-else 语句
2、if-else if 语句。具有很不错的效果
3、switch后面的表达式中只能是byte,int,short,char,String,枚举类型
- 循环语句
1、while
2、do-while
3、for
4、for-each
5、控制循环语句continue,break,return
- 数组类型
1、定义数组的语句,初始化数组
2、操作数组:取出数组元素的值;对数组元素进行赋值。
3、理解数组变量,数组元素在内存中的存储位置
4、理借栈内存,栈内存:栈内存存放基本数据类型变量和对象的引用。堆内存:存在类的对象
5、定义并初始化多维数组,多维数组在内存中的存储机制
6、操作数组的常用工具:
int binarySearch(type[] arr,type value);
int binarySearch(type[] arr,int fromeIndex,int toIndex,type value);
type[] copyOf(type[] original,int newLength);
type[] copyOfRange(type[] original,int fromIndex,int toIndex);
boolean equals(type[] arr,type[] a2);
void fill(type[] arr,int fromIndex,int toIndex,type val);
void sort(type[] arr);
void sort(type[] arr,int fromIndex,int toIndex);
String toString(type[] arr);
注意fromIndex : toIndex是含左不含右 - 面向对象的三大特征及理解
- 修饰符以及它们所限制的范围
public-protected-default-private
- 面向对象的概念
引用数据类型,引用变量
类,对象,属性,方法,类成员,构造器 - 创建对象时的内存图
- This关键字
当成员变量和局部变量同名时,使用this关键字可以进行区分。最常见的就是,形参和成员变量同名。 - Static关键字
- 匿名对象
匿名对象是指仅创建了对象而没有定义该对象的引用。
匿名对象调用完毕就是垃圾,可以被垃圾回收器回收 - Java中的方法
Static修饰的方法
方法的参数传递机制:值传递
方法递归
方法重载 - 成员变量和局部变量
在程序中,应该尽可能地缩小局部变量的作用范围,局部变量的作用范围越小,在内存中停留的时间越短,程序运行性能就越好
如果变量是用来描述类或者对象的固有信息,比如一些固定不变的值的信息,需要将变量定义成类变量 - 构造器
构造器的作用:创建对象时,进行对象的初始化即对对象属性进行赋值处理
如果类提供了带参的构造器,那么系统提供的默认的即无参的构造器便不会被调用
考虑:当我们创建了一个对象的时候 ,JVM都干了一些什么事?
static关键字修饰的特点?
静态变量和局部变量的区别?
1.归属不同2.内存中位置不同3.在内存中出现的时间不同4.调用方式不同 - 封装
封装的目的
解决类的命名冲突、类文件管理问题的机制
java包:主要是核心类,javax包:主要是扩展类,其他常用包的功能 - 继承
继承的目的
继承造成了耦合性的增加,违背了高内聚,低耦合的原则,所谓内聚就是独立完成某件事的能力
方法的重写,当父类的方法有private修饰时,在子类中定义同名同参的方法并不属于重写
super关键字
继承时父类的构造器不能被继承
仔细考虑什么时候用继承 - 继承–调用父类构造器
子类在进行实例化时,会首先调用父类的构造器,以防子类中会用到父类的属性。调用父类的构造器又分为两种:隐式和显式。如果父类的关键字是隐式定义的,那么程序就会自动帮助我们调用父类的构造器,如果父类的构造器是显式定义的,那么子类就得显式定义一个构造器,其中显式的调用父类的构造器。super关键字可以实现对父类属性的初始化。在子类构造器中,super关键字一定要放在第一行,否则程序会首先调用默认的super进行初始化,后面super就不是第一次执行了。
Override和Overload的区别
理解this关键字和super关键字的作用 - 多态
理解多态
多态的弊端
Java程序中,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型中独有的方法。或者可以理解为,父类类型的变量只能调用自己的有过定义的方法和属性,而不能调用子类特有的方法和属性
使用引用类型的强制类型转换,可以实现父类类型的变量调用子类独有的方法,要求具有继承关系的两个类型之间才可以进行强制类型转换
成员变量是事物的外物描述,成员方法是事物的具体功能
多态继承中的内存图解 - instanceof判断一个对象是否属于某个类
- 继承和组合
继承是实现类重用的重要方式,但是继承破坏了类的封装性,组合也是实现类重用的重要方式。
为保证父类具有很好的封装性,在设计父类时要注意一下几个注意点:
1、属性尽量用private
2、父类中作为辅助其他方法的工具方法,为了防止子类的修改,应该使用private修饰
3、父类中的方法需要被外部类调用,但又不希望子类重写该方法, 可以用final修饰
4、父类中的方法可以被子类重写,但又不希望被其他类访问,可以用protected修饰
5、不要在父类的构造方法中调用会被子类重写的方法。
使用组合复用一个类的方法。即把一个类当成另一个类的组成部分,从而直接使用类中的public方法。通俗来看:就是在一个类中的成员变量中有另一个类的对象,这样通过这个成员变量就可以使用其他类的方法。 - 包装类
基本数据类型没有面向对象的特点,所以设计了他们所对应的包装类
装箱和拆箱
基本数据类型转换成字符串:String.valueOf()
字符串转换成基本数据类型:Integer.parseInt()
Float.parseFloat()
- 打印对象
toString()
方法只是打印该对象的“包名+类名+@+hasdCode值”
若打印对象的信息,需要重写toString方法 - ==和equals
- 类成员
类成员变量,类方法,类初始化块
对象可以访问类方法(这时会报警告),但是类成员不能访问实例成员 - 单例类
只能实例化一次,多于一次的实例化都是返回第一次创建的对象
步骤:1、使用private修饰构造器。2、提供一个public static的方法调用构造器。2、创建一个private static的变量存放对象 - 初始化块
一个类中可以包含多个初始化块,初始化块的执行是有顺序的,初始化块首先执行,一行代码也是一个初始化块
初始化块:可以当做无参的构造器来使用。
静态初始化块是伴随着类的存在而存在,用于执行类的初始化动作,而且只执行一次。
执行顺序:静态初始化块->普通初始化快->构造器 - final
final关键字实现了Java的不可变类。
使用final修饰的变量不能够被重新赋值,使用final关键字修饰的方法不能够被子类覆盖,使用final关键字修饰的类不能够被继承。
final定义的成员变量必须进行赋初值,系统不会自动的进行隐式的赋初值,如果不在定义时进行赋初值,必须在初始化块中进行初始化。
final定义的局部变量在定义时可以不赋初值,但使用之前要赋初值而且只能赋值一次
final修饰基本数据类型时,基本数据类型的值不可变
final修饰引用数据类型时,引用变量上的值是对象的地址,这个地址时不可变的,但是对象的内容还可以被修改。
构造不可变类:用private final修饰属性,用有参构造器实现属性的初始化,仅提供getter方法 - 抽象类
包含抽象方法的类是抽象类
抽象类并不一定包含抽象方法
抽象类不能被实例化,抽象类可以包含正常类所具有的成分。
包含抽象方法的类只能被定义成抽象类
抽象类可以包括构造方法,这个构造方法用于实现子类对于父类数据的初始化。
抽象类可以包括非抽象的方法
抽象类的作用:抽象类提供了子类应该做什么的一个模板,子类应该在这个模板的基础上进行扩展,从而避免了子类设计的随意性。
分析是从具体到抽象,实现是从抽象到具体。 - 接口
接口是从抽象类中抽象出来的更为彻底的“抽象类”
接口是一系列方法特征的集合
一个接口中可以有常量的定义,接口只能继承接口
接口中不包括构造器和初始化块,但是包括属性,方法,内部类。但由于没有构造器,所以属性只能是static final修饰的,而且系统也是默认它们是这样的。
接口中的方法都是抽象方法,而且系统默认他们都是public abstract 的
接口支持多继承
接口的作用:1、定义引用类型的变量。2、被类实现。
接口被具体类实现时,必须实现类的全部抽象方法,如果不实现全部的抽象方法,那么这个类就具有了抽象方法,这个类就必须是抽象类。
接口类似于系统的总纲,体现的是一种规范,而抽象类则类似于一个系统实现过程中的中间产品,实现了部分功能,还有部分没有实现的功能。
接口体现的是一种规范和实现分离的设计模式,充分利用接口可以很好降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。
接口体现的是规范和扩展,抽象类体现的是抽象和实现。
接口的案例:1、扩展功能–将需要扩展的功能集合写在一个接口中,然后让需要被扩展的类实现这个接口。2、简单工厂模式–创建一个工厂类,在这个工厂类中创建并返回对象,需要该对象的类调用这个工厂类实现创建对象,当需要修改的时候只需要在工厂类中进行修改即可。
Java8接口使用普通方法:需要借助两个关键字 static default。static使该方法成为静态方法,default定义的是默认的方法实现。
抽象类做参数:抽象类引用抽象类派生出的子类的对象做参数。
接口做参数:接口引用实现接口的类的对象做参数
抽象类做返回值:返回抽象类派生出的子类的对象
接口做返回值:返回实现接口的类的对象 - 内部类
内部类(嵌套类),外部类(宿主类)
成员内部类、局部内部类、非静态内部类、
静态内部类:静态内部类只能访问外部类的类成员。外部类不能直接访问内部类的成员
匿名内部类:必须继承一个父类。创建类时就会创建对象,本质上就是一个子类匿名对象。无法定义构造器,通过初始化块进行初始化操作 - 枚举类
枚举类
默认继承自java.lang.Enum
构造器使用private修饰
非抽象的枚举类不能被继承(final)
所有实例在第一行显示列出,并使用public static final修饰
Enum和switch语句的连用 - Scanner获取键盘的输入
1、两个方法:hasNextXxx(),nextXxx()
2、nextInt()
和nextLine()
先后出现时
int accountNumber = Integer.parseInt(input.nextLine());
将数字的读入改成:先读入字符串,再转成数字。
int accountNumber = input.next();
这种方法是直接使用next - Object类
protected void finalize();
Class<?> getClass();
- System类的主要操作
获取系统环境的相关信息
获取指定的环境变量
获取属性信息
获取指定的属性信息
获取当前时间 - Runtime类
输出处理器的数量
输出总内存的数量
输出最大内存的数量
输出自由内存的数量 - Java内存分配机制
- String,StringBuffer,StringBuilder
String:不可变类,字符串一旦定义就不可再变
StringBuffer:是可变的,可以实现访问和修改等操作
StringBuilder:类似StringBuffer,StringBuffer是线程安全的
String和StringBuffer做形参不一样,String是不可变类,它的形参的改变对自身没有什么影响
StringBuffer sb1 = new StringBuffer("hello");StringBuffer sb2 = new StringBuffer("world");System.out.println(sb1+"--"+sb2);change(sb1, sb2);System.out.println(sb1+"--"+sb2);public static void change(StringBuffer sb1, StringBuffer sb2) {sb1 = sb2;sb2.append(sb1);}
这里:赋值操作没有改变sb1的值???
Java系列--总纲相关推荐
- 我爱Java系列---【 maven依赖版本冲突的解决方法】
我爱Java系列---[ maven依赖版本冲突的解决方法] 参考文章: (1)我爱Java系列---[ maven依赖版本冲突的解决方法] (2)https://www.cnblogs.com/hu ...
- Java系列笔记(1) - Java 类加载与初始化
2019独角兽企业重金招聘Python工程师标准>>> 目录 类加载器 动态加载 链接 初始化 示例 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如 ...
- 跟老杨学java系列(一)前传
跟老杨学java系列(一)前传 首先声明一下哈,本人文笔水平有限,不喜勿喷.欢迎大家留言探讨技术问题.其他问题概不回复. 上台来首先做个自我介绍(~~偷师相声开场白),本人从事IT开发行业快二十个年头 ...
- java sftpv3client_Ganymed SSH-2 for Java系列8之SFTPv3Client说明
Ganymed SSH-2 for Java系列8之SFTPv3Client说明: SFTPv3Client是SSH for java的一个SFTP(协议版本 3), 客户端通过SSH-2连接的一个简 ...
- Java系列笔记(4) - JVM监控与调优【转】
Java系列笔记(4) - JVM监控与调优[转] 目录 参数设置 收集器搭配 启动内存分配 监控工具和方法 调优方法 调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也 ...
- php数据库可转java数据库,php转java 系列2 Spring boo 链接数据库jdbc
php转java 系列2 Spring boo 链接数据库jdbc JDBC 首先创建一个新项目,在创建项目时要注意导入依赖, 在项目创建成功后就会看到在 pom.xml 文件中找到,但是如果在创建项 ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- 【Java系列】(四)Java多线程---线程安全
前言: 记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT.Socket.多线程.I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远 ...
- 教老婆学java系列之奇妙的数据结构四
教老婆学java系列之奇妙的数据结构四 数据结构最后一节 思考题:后台处理一件事,耗时较长,怎么将信息显示在页面上 问题解析: 1.前端触发,后端处理时间较长,前端不能等处理完成. 2.如果不等处理完 ...
最新文章
- 山东省百万奖金赛事来了!
- hdu 1003 dp
- matlab 类 方法,最好的组织MATLAB类的方法?
- MySQL: Connection Refused,调整 mysql.ini中的 max_connections
- GCD介绍(一): 基本概念和Dispatch Queue
- 从动力学角度看优化算法:一个更整体的视角
- php 格式化 sub,PHP DateTime sub()用法及代码示例
- java远程调用linux的命令或者脚本
- vue 生成发布包_Vue 3.0 终于正正正正正式发布了!
- mfs1.6.x故障一例,血的经验教训					推荐
- PHP FPM源代码反刍品味之三: 多进程模型
- java jstat结果分析_JVM调优总结 + jstat 分析
- java getidentifier_android – 如何使用getResource.getIdentifier()获取布局?
- 直播卖房和VR看房,到底是噱头还是新趋势?
- Kippo:一款强大的SSH蜜罐工具
- k8s集群搭建(一主多从)
- 学习TP5(一):TP5框架下载与快速入门使用
- foremost使用简介
- Nginx反向代理:多域名跳转多台服务器(研发需求)
- 【Android】PC端同步手机画面
热门文章
- 如何从“豌豆荚”下载APP的历史版本?
- 深入浅出HTML(针对后端攻城狮)
- vue3动态路由addRoute
- 程序猿生存指南-61 离巢之鸟
- (已发布源码)图像修复——上下文编码器以及加入全局判别器的改进(Context Encoder and Global and Local Discriminator)
- Java 中文 Unicode 编码转换
- 3.10 docker---概念介绍,安装和初识docker,docker的一些基本命令,使用docker部署一个nginx,
- Django计算机毕业设计jspm高校职称申报系统(程序+LW)Python
- Android的数据结构与算法----ArrayList源码解析
- Linux --- LV逻辑卷的创建和在线扩展