继承

继承使用关键字:extends

类的继承格式:

class 父类 { }

class 子类 extends 父类 { }

继承的特性:

  • 子类拥有父类非private的属性,方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法(重写)。
  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

——————-

implements 关键字:实现接口,可变相地使java具有多继承的特性,使用范围为类实现接口的情况(可同时实现多个接口)。extends仅具有多重继承的特性,而不是多继承。

super,this 关键字:super(用来实现对父类成员的访问,用来引用当前对象的父类)。this(指向自己的引用)

final 关键字:final声明的类为最终类,不能继承;修饰的方法不能被子类重写。注:实例变量也可以被定义为final ,被定义为final的变量不能被修改。被声明为final 的类,方法自动声明为final ,但是实例变量并不是fianl

构造器:子类不能继承父类的构造器,但是父类构造器带有参数的,必须在子类的构造器重显式地通过super关键字调用父类的构造器并配以适当的参数列表。 * 子类继承父类,如果父类中只含“有参构造器”,那么在子类中必须用super,先构造父类,然后构造子类。* java类构造方式的执行顺是要初始化子类必须先初始其父类。

package bao1;

public class FuLei {
	
	String name; // 姓名
	String sex; // 性别
	int age; // 年龄
	
	// 父类的无参构造器
	FuLei(){}
	
	// 父类的三参构造器
	FuLei(String name, String sex, int age){
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	// 父类的两参构造器 (类中参数不同的构造器其实就是方法重载)
	FuLei(String name, String sex){
		this.name = name;
		this.sex = sex;
	}
	
	// 父类的介绍方法
	public void jieShao() {
		System.out.println("他名字叫:" + name + "性别:" + sex + "年龄:" + age + "。");
	}
	
	// main方法必须写在 带 public 访问权限的类中,否则eclipse执行
	public static void main(String[] args) {
		ZiLei ziLei = new ZiLei("费瑟","男",23,"走走");
		ziLei.jieShao();
		ziLei.iLike();	
	}

}

/**
 * 子类继承父类,如果父类中只含“有参构造器”,那么在子类中必须用super,先构造父类,然后构造子类。
 * java类构造方式的执行顺是要初始化子类必须先初始其父类。
 * @author Facer
 *
 */
class ZiLei extends FuLei {
	
	String like; // 爱好

	ZiLei(String name, String sex, int age,String like) {
		super(name, sex, age);
		this.like = like;
	}
	
	// 子类重写父类的 jieShao() 方法
	public void jieShao() {
		System.out.println("她名字叫:" + name + ",性别:" + sex + ",年龄:" + age + "。");
	}
	
	// 子类的爱好方法
	public void iLike() {
		System.out.println(name + "的爱好是:" + like);
	}
}

 

 

可变参数

我们在编写方法的过程中,可能会遇到参数个数不确定的情况,有时候我们可以使用重载的方式解决问题,例如:

public void method();

public void method(int i);

public void method(int i, int j);

public void method(int i, int j, int k);

详情

java流程控制(循环,分支)

一、循环结构:

1.while 循环,首先判断布尔表达式,为真才会执行。例如:

while (布尔表达式) {

//循环内容

}

2.do..while 循环,首先执行一次do内的语句,在进行判断,为真再先继续走。例如:

do {

//代码语句

} while (布尔表达式)

3.for循环,执行顺序(首先执行初始化,再检测布尔表达式值,为真_循环体语句被执行,再执行更新,继续检测布尔表达式值…;检测布尔表达式值为假,循环终止并执行后面程序。)例如:

for (初始化; 布尔表达式; 更新) {

//代码语句

}

4.增强for循环,例如:

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或是返回值为数组的方法。

for (声明语句  : 表达式) {

//代码语句

}

break; 关键字:用来跳出整个语句块。多个循环跳出当前循环,并且继续执行循环下面的语句。

continue; 关键字:让程序立刻跳转到下一次循环迭代。在 for 循环中,continue语句使程序立即跳转到更新语句;在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

二、条件分支结构

1.if 语句:

1)if 语句:

if (布尔表达式) {

//如果布尔表达式为true,则执行语句内容

}

2)if…else语句:

if (布尔表达式) {

//如果布尔表达式为true

} else {

//如果布尔表达式为false

}

3)if…else if…else语句:

最多有一个else语句,一旦其中一个 else if 语句检测为true,其他的 else if 以及else语句都将跳过执行。

if (布尔表达式 1{

    //如果布尔表达式 1的值为true执行代码

else if (布尔表达式 2{

    //如果布尔表达式 2的值为true执行代码

else if (布尔表达式 3{

    //如果布尔表达式 3的值为true执行代码

else {

    //如果以上布尔表达式都不为true执行代码

}

2.switch语句,例如:

switch (expression){

    case value : //语句 break; //可选

    case value : //语句 break; //可选

    //你可以有任意数量的case语句

    default : //可选

    //语句

}

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。

switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

java运算符参考文档

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

  • 算术运算符

+(加) -(减) *(乘) /(除) %(取余/模) ++(自增) –(自减)

  • 关系运算符

==(等于) !=(不等于) >(大于) <(小于) >=(大等于) <=(小等于)

  • 位运算符

&(按位与) |(按位或) ^(按位非) ~(按位补/取反)<<(按位左移) >>(按位右移) >>>(按位右移补零)

  • 逻辑运算符

&&(与/短路逻辑运算符) ||(或) !(非)

  • 赋值运算符

= += -= …

  • 其他运算符

?:(条件运算符,例如:4 > 5 ? 前边为真的结果 : 前面为假的结果)instanceof(该运算符用于操作对象实例,检查该对象是否是一个特定类型[类类型或接口类型],例如:String name = “James”; 换行 boolean result = name instanceof String;//由于 name 是 String 类型,所以返回真)

java变量与常量的声明

Java语言支持的变量类型有:

1.局部变量:类的方法中的变量。

2.实例变量:独立于方法之外的变量,不过没有 static 修饰。

3.类变量:独立于方法之外的变量,用 static 修饰。

一、java局部变量:

  • 局部变量声明在方法、构造方法或者语句块中;
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见;
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

二、java实例变量:

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用前或者使用后;
  • 访问修饰符可以修饰实例变量;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

三、类变量(静态变量)

  • 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
  • 静态变量在程序开始时创建,在程序结束时销毁。
  • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
  • 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
  • 静态变量可以通过:ClassName.VariableName的方式访问。
  • 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。

*变量的声明方式:

1.int i,j;(不提倡这种风格,逐一声明每一个变量可以提高程序的可读性。)

2.int i; 换行 i = 1;(变量的声明和变量的初始化分开)

3.int i = 1;(变量的声明和初始化一起进行)

java常量的声明:

final double PI = 3.14;(关键字final表示这个变量只能被赋值一次。一旦被赋值后,就不能够再更改了。习惯上常量名使用全大写。)