System.out.println(args[i]);
}
}
方法的参数传递:
〉形参:
方法声明时,方法小括号内部的参数
〉实参:
调用方法时,实际传入的参数值。
〉规则:
java中的参数传递机制:
值传递
〉形参是基本数据类型:
将实参的值传递给形参的基本数据类型的变量
〉形参是引用类型的:
将实参的引用类型变量的值传递给形参引用类型变量。
面向对象特征1:
封装与隐藏
〉思想:
〉将类的属性私有化
〉提供公共的方法(getter&&setter)来调用
Java的四种权限访问修饰符
〉java的权限修饰符public,private,protected置于类的成员定义之前,用来限定对象对于该类成员的访问权限。
〉对于class得权限修饰只可以是public和default(可省略)
〉public类可以在任意的地方被访问
〉default类只可以被同一包内部的类访问
〉权限从大到小排序:
publicprotecteddefaultprivate
用来修饰属性和方法
类的第三个成员:
构造器(constructor构造方法)
〉构造器的作用:
〉创建对象
〉给创建的对象赋初值
〉设计类时,若不显示的声明构造器,则类默认的提供一个空的构造器
〉一旦显示的定义构造器,则不会提供默认的构造器
〉格式:
权限修饰符构造器名(和类名一致)(形式参数)
〉类的构造器之间构成重载
类对象属性的赋值操作(先后顺序)
〉属性的默认初始化
〉属性的显式赋值
〉通过构造器给属性初始化
〉通过“对象.方法”的方式给属性赋值
关键字this
Ø在方法的内部使用,是这个方法所属对象的引用
Ø在构造器内部使用,表示这个构造器正在初始化对象。
Øthis表示当前对象,可以调用类的属性,方法和构造器。
Ø当在方法内部需要调用到该方法的对象的时候,就要使用this关键字
Ø可以用来修饰属性,方法,构造器
Øthis()可以显示调用当前类重载的指定的构造器
(1)这条语句必须放在首行
(2)一个类中有n个构造器,则最多有n-1个构造器使用了this()方法
Ø当形参与成员变量重名的时候,如果在方法内部需要使用成员变量,必须添加this来表明该成员变量是类成员。
Ø在任何方法内,如果使用当前类的成员变量或者成员方法可以在其前面添加this,增强程序的阅读性。
JavaBean
ØJavaBean是java语言写成的一种可重用组件。
Ø是符合如下标准的java类
(1)类是公共的
(2)有一个无参数的公共构造器
(3)有属性,且有对应的getter,setter方法
UML图
包机制
Øpackage:
声明源文件所在的包,一般声明在程序的第一行
Ø每个点”.”表示一层文件目录
Ø包名一般为公司域名的逆序
Ø包名都要小写
Import机制
Ø显示导入指定包下的类或者接口
Ø写在包的声明和源文件之间
Ø如果需要导入多个类或者接口,那么就并列写出
Ø如果导入的类是java.lang包下的,则不需要导入。
Ø.*表示该包下面的所有内容
Ø处理同名类不同包的情况需要显示的声明,比如:
java.util.Date和java.sql.Date
Øimportstatic表示导入指定类的静态的属性和方法。
Ø导入java.lang.*只能导入lang包下的所有接口和类,不能导入lang的子包下的接口或者类。
JDK主要包介绍
面向对象的特征之二:
继承
Ø通过classAextendsclassB的方式来继承
Ø子类:
A父类或者基类:
B
Ø子类继承父类以后,就可以获得父类中声明的属性和方法
Ø当父类中有私有的属性或者方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用。
Ø子类除了通过继承获取父类的特性以外,还可以定义自己的属性和方法
Ø继承的关键字:
extends
Ø子类是对父类功能的一种扩展,明确子类不是父类的子集。
ØJava的继承特点:
只支持单继承,不支持多继承。
一个类只能继承一个父类,一个父类可以有多个子类。
方法的重写
Ø前提:
有子类继承父类
Ø子类继承父类以后,若父类方法对子类不适用,那么子类可以对父类的方法(override或者overwrite)
Ø格式:
修饰符返回值类型方法名(参数列表){}
Ø重写规则
〉要求子类方法的“返回值类型方法名(形参列表)”与父类方法一样。
〉子类方法的修饰符不能小于父类方法的修饰符
〉若父类方法抛出异常,子类方法抛出的异常类型不能大于父类方法抛出的异常。
〉子父类的方法必须同为static或同为非static
方法重写与重载的不同
Ø重载:
“两同一不同”:
同一类,同一方法名,不同的参数列表,方法的重载与方法的返回值无关。
Ø重写:
(前提:
在继承的基础之上,子类在获取父类的结构以后)可以对父类中同名方法进行“重构”
Ø方法的返回值,方法名,形参列表相同;权限修饰符不小于父类的同名方法。
关键字super
Ø在java类中使用super关键字来调用父类中的操作
(1)super可用于访问父类中定义的属性
(2)super可用于调用父类中定义的成员方法
(3)super可用于在子类构造方法中调用父类的构造方法
Ø尤其当子父类同名时,可以用super进行区分
Øsuper的追溯不仅限于直接父类
Øsuper和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识。
Ø可以修饰属性,方法,构造器
Ø当子类与父类中有同名属性时,可以通过“super.此属性”显示调用父类中声明的属性,若想调用子类的同名属性,要使用“this.此属性”
Ø当子类重写父类的方法以后,在子类中若想再次显示调用父类被重写的方法,就要使用super.方法
Ø使用super修饰构造器,通过在子类中使用“super(形参)”来显示调用父类中的制定的构造器。
(1)在构造器内部,super(形参)必须要声明在首行
(2)在构造器内部,this(形参列表)或super(形参列表)只能出现一个。
(3)当构造器中不显式的调用this(形参列表)或super(形参列表),则默认的调用父类的空参构造方法。
Ø建议:
设计一个类时,设计一个空参构造器。
this和super的区别:
面向对象特点3:
多态性
Ø多态性的体现
(1)方法的重写(overwrite)和重载(overload)
(2)对象的多态性(可以直接应用在接口和抽象类上)
ØJava引用变量有两个类型,编译时类型和运行时类型
Ø编译时类型由声明该变量时使用的类型决定的,运行时类型由实际赋给该变量的对象决定
Ø若编译时类型和运行时类型不一致,则会出现多态性。
Ø可以理解为一个事物的多种形态表现
子类对象多态性使用前提:
Ø要有类的继承
Ø要有子类对父类方法的重写
子类对象的多态性:
父类引用指向子类对象
程序运行分为编译状态和运行状态
Ø对多态性来说,编译时,看左边,将此引用变量看为父类的类型
Ø运行时,看右边,关注于真正对象的实体,子类对象
Ø类型转化
关键字instanceof
Ø格式:
对象ainstanceof类A,判断a是否是A的一个实例,是的话返回true,否则返回false
Ø若a是A的实例,那么a也是A类的父类的实例
Object类
ØObject类是所有java类的根父类
Ø如果在类的定义中未使用extends关键字指明其父类,则默认父类为Object类
==
Ø基本数据类型:
根据基本类型的数值判断是否相等,相等则返回true,不相等则返回false(注意:
两端的数据类型可以不相同,在不同的情况下也可以返回true)
Ø引用数据类型,比较引用类型变量的地址值(对象空间实体的首地址值)是否相等。
equals():
Ø来自于java.lang.Object类,是所有类的根父类
Ø只能处理引用类型变量
Ø在Object类发现,发现equals()仍然比较的两个引用变量的地址值是否相等。
toString()方法
ØtoString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。
Ø在进行string类型与其他类型操作的时候,自动调用toString()方法。
Ø可以根据需要在用户自定义类型中重写toString()方法
Ø基本类型转化为String类型时,调用了对应的包装类的toString()方法。
Ø打印一个对象的引用时,实际上默认调用的就是这个对象的toString()方法。
Ø当我们打印的对象没有重写Object类中的toString()方法,那么调用的就是Object类中的toString()方法,返回此对象所在类及对应的堆空间对象实体的首地址值。
Ø当我们打印的对象所在类重写了toString()方法时,调用的就是我们自己重写的toString()方法。
Ø常常这样重写:
将对象的属性值返回。
Ø像String类,包装类,File类,Data类等都已经实现了Object类中的toString()方法
包装类(Wrapped):
Junit单元测试类
Ø当前工程下->右击buildpath->addlibraries->Junit4
Ø在主类中创建一个空参的无返回值得方法,举例:
publicvoidtest1(){}用于代码的测试,方法上声明@Test
Ø导入importorg.junit.Test;
Ø在test1()方法中进行代码的编写
Ø测试,双击方法名,右键runas->junitTest即可
基本数据类型、包装类及String类之间的相互转换
Ø基本数据类型与包装类型的转化
(1)调用对应的包装类的构造器
@Test
publicvoidtest1(){
inti=10;
booleanb=false;
Integeri1=newInteger(i);
System.out.println(i1.toString());
}
Ø包装类到基本数据类型
调用包装类的XxxValue()方法。
JDK1.5以后的自动装箱和自动拆箱
Ø基本类型和包装类型到String类型
调用String类的静态重载ValueOf(XXXxx)方法
ØString类转化为基本数据类型或者包装类型
调用包装类的praseXxx(Stringstr)方法
包装数据类型与基本数据类型及String类型之间的转化图解
关键字static
Ø静态的,可以修饰属性,方法,代码块,内部类
Static修饰属性或者类变量:
Ø由类创建的所有的对象,都公用这一个属性
Ø当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。
Vs实例变量(非static修饰的属性,)
Ø类变量随着类的加载而加载,而且独一份
Ø静态变量可以通过“类.类变量”的方式进行直接的调用
Ø类变量的加载要早于对象,所以当有对象以后,可以“对象.类变量”使用,但是“类.实例变量”是不行的。
Ø类变量存在于静态域中。
static修饰方法(类方法)
Ø随着类的加载而加载,在内存中也是一份
Ø可以直接通过“类.类方法”来进行调用
Ø内部可以调用静态的属性或者方法,而不能调用非静态的属性和方法,反之,非静态的方法是可以调用静态的属性和方法,原因在于生命周期。
Ø静态结构(static属性,方法,代码块,内部类)的生命周期要早于非静态的的结构,同时回收也要万余非静态的结构。
设计模式:
在大量实践和理论化后优选的代码结构,编程风格,以及解决问题的思考方式,。
类的单例设计模式
Ø就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法,如果我们要让类在一个虚拟机中产生一个对象,我们必须首先将类的构造方法的访问权限修饰为private,这样就不需要new关键字在类的外部产生类的对象了,但在类的内部仍然可以产生类的对象,因为在类的外部开始还无法得到该类的对象。
只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类内部的静态成员变量,所以指向该类内部产生的该类的对象的变量也必须定义成静态。
Ø如何实现:
Ø饿汉式单例模式1:
Øpackagecom.eonline.lyy;
Ø/*
Ø*单例设计模式之:
饿汉式
Ø*/
ØpublicclassTestSingleton{
Øpublicstaticvoidmain(String[]args){
ØSingletons1=Singleton.getInstance();
ØSingletons2=Singleton.getInstance();
ØSystem.out.println(s1==s2);
Ø}
Ø}
Ø//只能创建Singleton的单个实例
ØclassSingleton{
Ø//1.私有化构造器,使得在类的外部不能调用此构造器
ØprivateSingleton(){
Ø}
Ø//2.在类的内部创建一个类的实例
ØprivatestaticSingletoninstance=newSingleton();
Ø//3.私有化此对象通过公共的方法来调用
Ø//4.此公共的方法只能通过类来调用,只能设置为static的,同时类的实例也必须设置为static
ØpublicstaticSingletongetInstance(){
Øreturninstance;
Ø}
Ø}
Ø饿汉式单例模式2:
Øpackagecom.eonline.lyy;
Ø/*
Ø*单例设计模式之:
饿汉式
Ø*/
ØpublicclassTestSingleton{
Øpublicstaticvoidmain(String[]args){
ØSingletons1=Singleton.getInstance();
ØSingletons2=Singleton.getInstance();
ØSystem.out.println(s1==s2);
Ø}
Ø}
Ø//只能创建Singleton的单个实例
ØclassSingleton{
Ø//1.私有化构造器,使得在类的外部不能调用此构造器
ØprivateSingleton(){
Ø}
Ø//2.在类的内部创建一个类的实例
ØprivatestaticSingletoninstance=null;
Østatic{
Øinstance=newSingleton();
Ø}
Ø//3.私有化此对象通过公共的方法来调用
Ø//4.此公共的方法只能通过类来调用,只能设置为static的,同时类的实例也必须设置为static
ØpublicstaticSingletongetInstance(){
Øreturninstance;
Ø}
Ø}
Ø
Ø单例模式之懒汉式
Ø/*
Ø*单例模式之懒汉式:
Ø*/
ØpublicclassTestSingleton1{
Ø
Øpublicstaticvoidmain(String[]args){
ØSingleton1s1=Singleton1.getInstance();
ØSingleton1s2=Singleton1.getInstance();
ØSystem.out.println(s1==s2);
Ø}
Ø}
ØclassSingleton1{
Ø//1.私有化构造器,使得在类的外部不能调用此构造器
ØprivateSingleton1(){
}
Ø//2.2.在类的内部创建一个类的实例
ØprivatestaticSingleton1instance=null;
Ø
Ø//3.私有化此对象通过公共的方法来调用
Ø//4.此公共的方法只能通过类来调用,只能设置为static的,同时类的实例也必须设置为static
ØpublicstaticSingleton1getInstance(){
Øif(instance==null){//可能存在线程安全问题
Øinstance=newSingleton1();
Ø}
Øreturninstance;
Ø}
Ø}
单例设计模式之懒汉式和饿汉式的区别:
Ø饿汉式不用创建实例对象
Ø懒汉式需要先判断是否存在实例对象,如果没有存在的话,就需要先创建实例对象,如果存在的话,直接返回该类的实例对象。
main方法的语法
类的成员之四:
块的初始化
Ø非静态代码块:
没有static修饰的代码块
(1)可以有输出语句
(2)可以有对类的属性,类的声明进行初始化的操作
(3)可以调用静态的变量或者方法
(4)若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
(5)每次创建对象的时候都会执行一次,且先于构造器。
Ø静态代码块:
用static修饰的代码块
(1)可以有输出语句
(2)可以有对类的属性、类的声明进行初始化的操作
(3)不可以对非静态的属性进行初始化,即:
不可以调用非静态的属性或者方法。
(4)若有多个非静态的代码块,那么按照从上倒下的顺序依次执行,
(5)静态代码块的执行要先于非静态代码块的执行。
(6)静态代码块执执行一次
关于属性赋值操作
Ø默认初始化
Ø显式初始化或者代码块初始化
Ø构造器中
Ø通过方法对对象的相应的属性进行操作。
关键字final
Ø在java中声明类,属性和方法时,可以使用关键字final修饰,表示“最终的意思”
Øfinal标记的类不能够被继承
Øfinal标记的方法不能被子类重写
Øfinal标记的变量(成员变量和局部变量)即是常量,名称大写,且只能被赋值一次。
Øfinal标记的成员变量必须在声明的同时或者在每个方法或者代码块中显式的赋值,然后才能使用
Ø变量用staticfinal