定义类
•定义类的语法格式:
•[修饰符] class 类名 {….类体…..}
•类体可以由多个属性、方法、构造器组成。
•注意:类的修饰符可以是public、final 或省略这两个。类名只要是合法的标识符.
•一个类里可以包含三种最常见的成员:构造器、属性、方法。
定义属性的格式语法
•[修饰符] 属性类型 属性名 [= 默认值];
定义方法的格式语法
•[修饰符] 方法返回值类型 方法名(形参列表) {….方法体….}
– 方法中的修饰符可以是public ,protected,private,static,final,abstract,其中访问控制符只能出现一
个,abstract ,final 只能出现其一.
–返回值类型可以是基本类型和引用类型,如果无返回值,要用void 来声明
–形参列表,可以由零到多组组成,参数之间用逗号(“,”)隔开.
–static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员.
定义构造器的语法格式
•[修饰符] 构造器名(形参列表) {……}
–修饰符可以是public protected private 构造器必须和类名相同,形参和方法的形参一样.
对象的产生和使用
•创建对象的根本途径就是构造器,所以创建对象通过关键字new 加上对应的构造器即可.
•如果访问权限允许,类里定义的属性和方法可以通过类或实例来调用,
•有static 修饰的访求和属性,既可通过类来调用,也可以通过实例来调用.
对象.引用和指针
•Person p = new Person();,这行代码创建了一个Person 实例,也被称为对象,这个对象被赋给了p变量.
•也就是说引用型变量里存放的仅仅是一个引用,它指向实际的对象.
对象的this 引用
•this 关键字总是指向调用该方法的对象.
–1.构造器中引用该构造器执行初始化的对象
–2.在方法中引用调用该方法的对象
•在方法里的this 指谁调用就指谁
•注: this 不能用在有static 修饰的方法中.
方法的详解
•方法的所属性
–一旦将一个方法定义在一个类里,如果用static 修饰了,这个方法属于这个类,否则属于这个类的对象.
–方法不能独立执行,必须要有调用者.(如:类.方法、对象.方法)
–方法不能独立定义,只能定义在类里.
–方法要么属于一个类,要么属于一个对象
方法的参数传递机制
传递方式只有一种:值传递.
形参长度可变的方法
•如果在定义方法时,在最后一个参数的类型后增加三点…,则表明该形参接受多个参数值,多个参数值被当成数组传
入.
•长度可变的形参只能位于最后一个参数,并一个方法里只能有一个可变长度的参数.
递归
•递归就是在方法中再次调用自己。
•递归一定要向已知方向递归.
方法的重载
•Java 允许在一个类里定义多个同名方法,只要形参列表不同即可.
•所以方法的重载只要满足两个条件(两同一不同):1.同一个类中,方法名相同;2.形参不同。和返回值类型无关.
所以在调用这些方法时要传入不同的参数值.
成员变量和局部变量
•成员变量指的是在类范围里定义的变量;局部变量指的是在一个方法内定义的变量。
•不管是成员变量还是局部变量都遵守相同的命名规则。
•成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变
了类属性,那么其他对象对应的类属性也改变了.成员变量不用显式初始化,只要定义了一个类属性或实例属性,系统
默认进行初始化。
局部变量
•局部变量可分为三种:
–形参
–方法局部变量
–代码块局部变量.
•与成员变量不同的是除了形参外,其他局部变量都必须显式地初始化,
•Java 里允许局部变量和成员变量重名。这样局部变量会覆盖成员变量,这时通过this 来调用实例的属性.
成员变量的初始化
•当类被加载时,类成员就在内存中分配了一块空间。
•当对象被创建时,实例成员就在内存中分配了内存空间。
•实例变量与实例共存亡;类变量与类本身共存亡。
局部变量的运行机制
•局部变量仅在方法内有效。
•当方法执行完成时,局部变量便会自动销毁。
封装
•理解封装:封装是面向对象的三大特征之一。
• 封装包含两方面含义:
–合理隐藏。
–合理暴露。
本文原创作者:pipi-changing
本文原创出处:http://www.cnblogs.com/pipi-changing/
使用访问控制符
•private 私有的。在同一个类里能被访问。
•default 默认的。包访问权限
•protected 受保护的。子类中也能访问
•public 公共的。在任何地方都可以访问
package 和 import
•package 打包格式:package 包名;放在程序开始的顶端。
•包机制的两个方面的保证。1.源文件里要使用package 语句指定包。2.class 文件必须放在对应的路径下。
•import 引入包格式。分为两种:
–非静态导入,导入的是包下所有的类。如:import package.subpackage.*;
–静态导入,导入的是类的静态属性。如:import static package.className.*;
Java 的常用包
•java.lang.*,
•java.util.*,
•java.net.* ,
•java.io.*,
•java.text.*,
•java.sql.*,
•java.awt.*,
•java.swing.*.
使用构造器执行初始化
•构造器最大的用处就是在创建对象时执行初始化,系统会默认的进行初始化。
•如果程序员没有Java 类提供任何构造器,则系统会为这个类提供一个无参的构造器。
•一旦程序员提供了自定义的构造器,遇系统不再提供默认的构造器。
构造器的重载
•构造器的重载和方法的重载一样,都是方法名相同,形参列表不相同。
•在构造器中可通过this来调用另外一个重载的构造器。
继承的特点
•Java通过关键字extends来实现,实现继承的类称为子类,被继承的类称为基类、超类、父类。父类是大类,子
类是小类。
•Java的继承是单继承,每个子类最多只有一个直接父类。
本文原创作者:pipi-changing
本文原创出处:http://www.cnblogs.com/pipi-changing/
继承
•子类继承父类的语法格式如下:
•修饰符 class subclass extends superclass {。。。。。。}
•子类扩展了父类,将可以获得父类的全部属性和方法,但不能获得父类构造器
•Java里的继承都是单继承,也就是只能有一个直接的父类,可以有n个间接父类。
重写父类的方法
•方法的重写要遵循“两同两小一大” 指的是:方法名相同,形参列表相同。返回值类型更小或相同,抛出的异常更
小或相同,访问控制权限要更大。
父类实例的super限定
•通过关键字super 来调用父类的方法或属性。
super调用父类的构造器
•子类构造器总会调用父类构造器。
•如果子类构造器没有显式使用super调用父类构造器;子类构造器默认会调用父类无参数的构造器。
•创建一个子类实例时,总会先调用最顶层父类的构造器。
多态性
•Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类
型决定,运行时的类型由实际赋给该变量的对象决定。
•如果编译时类型和支行时的类型不一致,这就有可能出现所谓的多态。
•两个相同类型的引用变量,由于它们实际引用的对象的类型不同,当它们调用同名方式时,可能呈现出多种行为
特征,这就是多态。
引用变量的类型转换
•将一个子类对像赋给父类,这就是向上转型。向上转型是自动的。
•强制类型转换: 类型转换运算符是小括号,语法如下(type)variable;
instanceof运算符
•前一个操作通常是一个引用类型的变量,后一个操作通常是一个类(也可以是接
口)。如果是 返回true, 否返回false。
继承和组合
•使用继承的注意点
•利用组合实现复用:总之,继承要表达的是一种“是(is-a)”的关系,而组合表达的是”有(has-a)“的关系。
本文原创作者:pipi-changing
本文原创出处:http://www.cnblogs.com/pipi-changing/
初始化块
•使用初始化块:初始化块由大括号括起{…},只能由static修饰。
•初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参。
静态初始化块
•用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块 ,
但执行一个子类时,最先执行其最顶层父类的静态初始化,
•初始化块是属于实例 的。只要创建一次对象,初始化块就执行一次。
下面贴出代码:
Dog
DogTest
Person
PersonTest
ReturnThis
StaticAccessNonStatic
ThisInConstructor
Overload
OverloadVarargs
PrimitiveTransferTest
Recursive
ReferenceTransferTest
Varargs
复制代码
public class BlockTest {
public static void main(String[] args) {
{
// 定义一个代码块局部变量a
int a;
// 下面代码将出现错误,因为a变量还未初始化
// System.out.println("代码块局部变量a的值:" + a);
// 为a变量赋初始值,也就是进行初始化
a = 5;
System.out.println("代码块局部变量a的值:" + a);
}
// 下面试图访问的a变量并不存在
// System.out.println(a);
}
// 代码块局部变量a的值:5
}
复制代码
。。。。。。。。。。。。。。。。。。。
评级: 0
浏览量: 332
资源大小: 52B
上传时间: 2018-07-03
所需积分:
4