构造方法
方法名与类名相同 方法体没有返回值但是在方法声明的时候不需要使用void修饰的方法我们称之为构造方法
- 构造方法的作用 用于初始化对象 对象的属性赋值
- 没有参数的构造方法我们称之为无参构造方法
- 代码中没有编写过构造方法 Jvm在执行对象初始化的帮助程序追加无参构造方法
- 注意当一个类中 既没有无参构造方法也没有有参构造方法的时候jvm会追加一个午餐构造方法
- 但是当一个类中 存在有无参构造方法没有编写午餐构造方法的时候jvm不会追加有参构造方法
- 所以不论在任何情况下一定要自己手写一个无参构造方法
- 裹起来的代码我们称之为代码块或代码段
- 注意只有一对花括号包裹起来的代码我们称之为构造代码块或代码段 在Java类中我能
- 在构造代码快与构造代码中一样都是类在被实例化的过程中被调用的
- 并且构造代码块在构造方法之前执行
- 使用static修饰的代码块我们称之为静态代码块
- 当类加载的时候执行静态代码块 而且静态代码块 仅执行一次 不可多次执行
- 而构造代码块实在对类实例化的过程中执行的
- 执行优先级 静态代码块 ——> 构造代码块 ———> 构造方法
代码内容
public class Person07 {
static{
System.out.println("我是静态代码块");
}
{
System.out.println("我是构造代码块");
}
/**
* 昵称
*/
private String nickname;
/**
* 性别 1代表男性 0代表女性
*/
private int gender = 1 ;
/**
* 年龄
*/
private int age;
public Person07() {
System.out.println("我是无参构造方法");
}
public Person07(String nickname, int gender, int age) {
System.out.println("我是有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void eat() {
System.out.println("我是静态方法eat()");
}
}
测试代码内容
public class Person07Test {
@Test
public void test01() {
Person07.eat();
Person07.eat();
}
@Test
public void test02() {
// 初始化对象
Person07 person01 = new Person07();
Person07 person02 = new Person07("李昊哲", 1, 40);
}
}
子类与父类
- 子类能调用父类的特性,并且在父类满足不了子类的需求的时候,子类剋重写父类
- 方法重载:在同一个类中,参数列表不同的同名方法我们称之为方法重载
,同时在同一个类中而方法重写必须存在子父类继承关系 - super 调用父类的
- override 重写
- 子类 + extends + 父类,进行调用父类
父类代码
public class Person {
/**
* 昵称
*/
private String nickname;
/**
* 性别 1代表男性 0代表女性
*/
private int gender = 1 ;
/**
* 年龄
*/
private int age;
public Person() {
super();
}
public Person(String nickname, int gender, int age) {
super();
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子类代码
public class Man extends Person{
public Man() {
}
public Man(String nickname, int gender, int age) {
super.setNickname(nickname);;
super.setGender(gender);;
super.setAge(age);
}
}
包装类
包装类 包装类对象—>基本数据类型 拆箱 基本数据类型—>包装类对象 装箱 自动装拆箱
自动装拆箱是在 Jdk1.5版本以后的
包装类代码示例
public class Wraper {
public static void main(String[] args) {
// Byte byte
// Short short
// Integer int
// Long long
// Double double
// Float float
// Character char
// Boolean boolean
Integer a = 10;
int b = a;
int c = 20;
Integer d = c;
Integer e = 127;
Integer f = 127;
Integer h = 128;
Integer i = 128;
int aa = 127;
int bb = 127;
int cc = 128;
int dd = 128;
System.out.println(aa == bb);
System.out.println(cc == dd);
System.out.println(e == f);
System.out.println(h == i);
}
}
内部类与抽象类
内部类的概念:所谓内部类就是在一个类内部进行其他类结构的嵌套操作。
抽象类:在 java 中也可以创建一种类专门用来当做父类,这种类称为“抽象类”。抽象类的作用类似“模板”,其目的是要设计者依据它的格式来修改并创建新的类,但是不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。但是在抽象类的使用中同样存在单继承的局限,即一个子类只能继承一个抽象类
- 使用abstract修饰没有方法体的方法 我们称之为抽象方法
- 具备抽象方法的类必须是抽象类
- 使用abstract修饰的类 我们称之为抽象类
- 抽象类不一定必须有抽象方法
- 子类继承抽象类 第一种方法是重写抽象类中的抽象方法
- 子类继承抽象类 第二种方法是子类也是一个抽象类
- 使用final修饰的类不能被继承
- The class Person can be either abstract or final, not both
- The type Female cannot subclass the final class Person
代码示例
public class Demo {
public static final String FLAG = "CHINA";
private String name = "Java";
public String getName(){//设置姓名
return name;
}
public void setName(String name){//取得姓名
this.name = name;
}
public abstract void print();//定义抽象方法
}