Java基础(一)
常用语言概述
PHP:中小型后台
scala:大数据
C++:应用软件
Java:大数据,后台(大型),Andriod
Python:AI
Java语言概述
Java基础是学习JavaEE、大数据、Android开发的基础
Java取消了强大又危险的指针
Java提供了自动内存管理机制,由垃圾回收器在后台自动回收
Java两种核心机制
Java虚拟机:JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
编译器的作用:将源文件编译成class文件
虚拟机的作用:将字节码class文件解释成对应平台机器码并执行
JDK(Java开发工具包)和JRE(Java运行环境):使用JDK的开发工具完成的Java程序,交给JRE去运行
配置环境环境
让任何目录都可以运行Java开发工具集
DOS命令执行Java文件
①编译:javac 源文件名
②运行:java 字节码文件
MVC设计模式
视图模式层(view显示数据):1、相关工具类 2、自定义
控制层(controller处理业务逻辑):1、应用界面相关 2、存放fragment 3、显示列表的适配器 4、服务器相关 5、抽取的基类
数据模型层(model主要处理数据):1、数据对象封装 2、数据库操作 3、数据库
这种模式将程序输入输出、数据处理,以及数据的展示分类开来的设计模式使程序变得灵活而且清晰,同时也描述了程序各个对象
之间的通信方式,降低了程序的耦合性。
GC简介
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或
系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
jar文件
jar文件的全称是Java Archive File,意思是Java档案文件。通常jar文件是一种压缩文件。与常见的zip压缩文件兼容,通常
被称为jar包。jar文件与Zip文件的区别就是在jar文件默认包含了一个名为MATA-INF/MANIFEST.MD的清单文件,这个清单文件是在生成jar文件时由系统自动创建。
使用jar文件的好处:
1、安全。能够对jar文件进行数字签名,只让能够识别数据签名的用户使用的东西。
2、加快下载速度,只需要建立一次HTTP连接,若不打包成jar包,则需要
3、压缩后使文件变小,jar的压缩机制和zip相同
4、包封装,能够然jar包里面的文件依赖于同一版本的类文件
5、可移植性,jar包作为内嵌在java平台内部处理的标准,能够在各种平台上直接使用
运行jar包的方法:
1、使用java命令,使用java运行时语法的是:java -jar test.jar
2、使用javaw命令,使用javaw运行时的语法是:javaw test.jar
Object类的主要方法
public boolean equals(Object obj):对象比较
public int hashCode():获取Hash值
public String toString():对象打印时调用
数组
栈(Stack):存储局部变量
堆(Heap):new出来的结构:对象、数组
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被隐式初始化,默认值为Null
定义的同时并初始化:int[] arr=new int[5]
遍历数组的3个方法
①、for循环:for(int i=0;i<=arr.length;i++)
③、foreach循环:for(int a:arr)
③、Arrays工具类中的toString静态方法
抽象
抽象方法和抽象类的规则:
1.抽象方法和抽象类必须使用abstract修饰符来修饰,抽象方法不能有方法体
2.抽象类不能被实例化
3.抽象类和类一样包含成员变量、方法、构造器、初始化块、内部类。抽象的构造器不能用于创建实例,只要是用于被其子类调
用。
4.含有抽象方法的类(①直接定义了一个抽象方法 ②继承了一个抽象父类或者实现了一个接口,没有完全实现其中的抽象方法)
5.abstract不可以和private final static关键字一起使用
作用:
从语义的角度来看,抽象类是从多个具体类中抽象出来的父类,它具有高层次的抽象。从多个具有相同特征的类中抽象出一个抽
象类,以这个抽象类作为其子类的模板,从而避免了子类设计的随意性。
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上
会大致保留抽象类的行为方式。
模板模式的简单规则:
1. 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类实现类实现。
2.父类中可能包含需要调用其他系列方法的方法,这些被调方法既可以由父类实现,也可以由其子类实现。父类里提供的方法
只是定义了一个通用算法,其实现也许依赖于其子类的辅助。
接口
接口可以看做一种更加特殊的“抽象类”,接口里面不能包含普通方法均是抽象方法,默认省略public abstract
接口是从多个相似类中抽象出来的规范,接口不提供任何实现,接口体现的是规范和实现分离的设计哲学。
让规范和实现正是接口的好处,让软件系统的各组件之间面向接口耦合,是一种松耦合的设计。软件系统的各模块之间也应该采用
这种面向接口的耦合,从而尽量降低各模块之间的耦合,为系统提供更好的可扩展性和可扩展性。
接口定义的是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里通常是定义一组公共方法。
注解Annotation
Annotation其实是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用
Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
@Override:限定重写父类方法,该注解只能用于方法
@Deprecated:用于表示某个程序元素已过时
@SuppressWarning:抑制编译器警告
@Retention:用于指定该Annotation可以保留多长时间,
其值有RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注解
RetentionPolicy.CLASS(默认值)::编译器将注解记录在class文件中,当java程序运行时,JVM不会保留注解
Retention.RUNTIME:编译器将注解记录在class文件中,当java程序运行时,JVM会保留注解,程序可以通过反射获取该
注解
Enum枚举类
一个java源文件最多只能定义一个public访问权限的枚举类
和普通类的区别:
1.enum默认继承了java.lang.Enum类而不是默认继承Object类,因此枚举类不能显示继承其他父类。其他
java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。
2.使用enum定义、给抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
3.枚举类的构造器默认private访问控制符
4.枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远不能产生实例。列出这些实例时,系统会自动添
加public static final 修饰
package
package的作用:
1、包帮助管理大型软件:将语气相似的类组织到同一个包中。比如:MVC设计模式
2、包可以包含类和子包,划分项目层次
3、解决类命名冲突的问题
4、控制访问权限
开发中包的命名:公司域名的倒写:如www.tencent.com,则将包命名为com.tencent
java中常见包的说明:
1、java.lang:包含java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
2、java.net:包含执行与网络相关的操作的类和接口
3、java.io:包含能提供多种输入/输出功能的类
4、java.util:包含一些实用工具,如定义系统特性、接口的集合框架类、实用与日期相关的函数
5、java.text:包含了一些java格式化相关的类
6、java.sql:包含了java进行JDBC数据库编程的相关类/接口
7、java.awt:包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
封装
指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的
操作和访问。
继承
提高了代码的复用性,继承的出现让类与类之间产生了关系,提供了多态的前提,java中仅支持单继承,若父类无无参构造器,
那么子类必须显示的调用父类带参的构造器。
设置父类应遵循的规则:
1、尽量隐藏父类的内部数据,将所有成员变量设为private,不要让子类直接访问父类的成员变量。
2、不要让子类可以随意访问、修改父类的方法。父类中那些仅为辅助其他的工具方法,应该使用private访问控制符修饰,让子
类无法访问该方法。如果不希望某方法被重写,可以使用final关键字。若希望该类被重写,可以使用protected来修饰该方法。
多态
多态实现的前提:1、需要存在继承或实现关系 2、要有覆盖操作
表现形式:1、方法的重载和重写 2、对象的多态性:父类/接口的引用指向子类的对象/实现类
java引用变量:
编译时类型:由声明该变量时使用的类型决定
运行时类型:由实际赋给该变量的对象决定
若编译时类型和运行时类型不一致,就出现了多态
对象类型转换:
从子类到父类(向上转型[多塔]):自动进行
从父类到子类(向下转型):强制类型转换
向下转型需满足:1、有继承关系 2、instanceof测试返回值为true
赋值顺序
赋值顺序:默认值->显示赋值/代码块->构造器->对象名.方法名/对象名.属性名
异常处理
try{
用于放置可能引发异常的代码;
}catch(Exception e){
异常发生后的处理行为;
}finally{
一定需要执行的代码,如回收物理资源;
}
throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常;而throw用于抛出一个实际的异常