java new对象 代码块_Java基础之:OOP——代码块

Java基础之:OOP——代码块

代码块又称初始化块,是类中的成员(即类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来,也是通过调用执行。

但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

基本语法

[修饰符]{

代码(方法体)

};

说明:

修饰符可选是否添加,但只能添加static

代码块分为两种,加了static的静态代码块,没加static的普通代码块

逻辑语句可以是任何逻辑语句(输入、输出、方法调用、循环、判断等)

结尾的“;”号可以不写,[建议不写]

代码块优点

代码块相当于另外一种形式的构造器(对构造器的补充机制),可以作初始化的操作。

当构造器重载时,可以提取多个构造器重复执行的代码,放入代码块中。

简单案例

电影放映

public class CodeBlockTest02 {

public static void main(String[] args) {

new Movie();

System.out.println("----------------");

new Movie("唐人街探案3..");

System.out.println("---------------");

new Movie("我和我的祖国...", 80, "张艺谋");

}

}

class Movie {

private String name;

private double price;

private String director;

//代码块

{

System.out.println("电影开始播放广告...");

System.out.println("电影屏幕拉下来.");

System.out.println("电影播放.");

}

public Movie() {

}

public Movie(String name) {

this.name = name;

}

public Movie(String name, double price, String director) {

this.name = name;

this.price = price;

this.director = director;

}

}

结果输出

90f72e7e877e9997c6cf4fdf14f06810.png

代码块使用说明

static代码块又称静态代码块,静态代码块在类加载时就会执行且仅执行一次,和静态属性/静态方法相同。静态代码块的作用就是初始化类。

普通的代码块,在每次对象被声明时执行,所以每声明一个对象执行一次普通代码块。

如果只使用类的静态成员,则不会执行普通代码块。因为只要不声明对象,普通代码块就不会执行。

什么时候类被加载:

创建对象时: Person p = new Person();

创建子类对象时,父类也会被加载:Student s = new Student(); (Student extends Person,Student和Person都会被加载)

使用类的静态成员(静态属性,静态方法)时:Student.totalFee; (private static double totalFee)

创建对象时,类的调用顺序

调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)

调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)

调用构造方法。

构造方法(构造器) 的最前面其实隐含了 super()和 调用普通代码块。

class Person{

public Person(){

super();

//调用普通代码块

System.out.println("Person");

}

}

静态相关的代码块,属性初始化,在类加载时,就执行完毕, 因此是优先于 构造器和普通代码块执行的。

静态代码块只能直接调用静态成员,普通代码块可以调用任意成员。(因为在静态代码块执行时,只有静态成员已经被加载了)

对象加载顺序案例

package codeBlock;

public class Extends_blockTest {

public static void main(String[] args) {

new C();

}

}

class A{

private String name = nameA();

private static int age = ageA();

static {

System.out.println("A .... static Block");

}

{

System.out.println("A .... ordinary Block");

}

public String nameA() {

System.out.println("A .... ordinary Args");

return "AAA";

}

public static int ageA() {

System.out.println("A .... static Args");

return 18;

}

public A() {

System.out.println("A .... constructor");

}

}

class B extends A{

static {

System.out.println("B .... static Block");

}

private String name = nameB();

private static int age = ageB();

{

System.out.println("B .... ordinary Block");

}

public String nameB() {

System.out.println("B .... ordinary Args");

return "BBB";

}

public static int ageB() {

System.out.println("B .... static Args");

return 18;

}

public B() {

System.out.println("B .... constructor");

}

}

class C extends B{

private String name = nameC();

private static int age = ageC();

static {

System.out.println("C .... static Block");

}

{

System.out.println("C .... ordinary Block");

}

public String nameC() {

System.out.println("C .... ordinary Args");

return "CCC";

}

public static int ageC() {

System.out.println("C .... static Args");

return 18;

}

public C() {

System.out.println("C .... constructor");

}

}

输出结果

A .... static Args

A .... static Block

B .... static Block

B .... static Args

C .... static Args

C .... static Block

A .... ordinary Args

A .... ordinary Block

A .... constructor

B .... ordinary Args

B .... ordinary Block

B .... constructor

C .... ordinary Args

C .... ordinary Block

C .... constructor

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发阳光旅行网app中用户下单功能,可实现用户添加订单并完善出行人信息、修改订单,删除订单以及打印行程信息等功能。 具体功能要求如下: (1)显示系统主菜单 包括添加出行订单、查看我的出行订单、修改订单信息、删除出行人、查看行程、退出系统6项功能,其他功能本项目不做要求,当用户选择功能编号后可进入执行相应功能。执行结果如图1所示。 图1 主菜单 (2)添加出行订单 填写出行日期、联系人手机号码、循环录入出行人信息。 出行人信息包括: 出行人类别:成人、儿童(1.2m以下)、老人(65岁以上) 姓名 年龄(如选择类别为老人,输入年龄不足65岁的,显示提示信息“对不起,老人订单年龄需为65岁以上!”) 如果是儿童,需确定是否占床 每成功录入一条出行人信息后,显示出其详细信息,并计算出行金额。定价如下: 成人:2000元/人 儿童:免费,如需占床另加30元 老人:半价,即1000元/人 当一条出行人信息录入完毕后,提示“是否继续添加(Y/N)?”,此处不区分大小写,当输入y或Y时继续录入下一条,否则显示订单信息,包括: 出行日期 联系人手机号码 订单总金额(即所有出行人定单金额之和) 最后显示主菜单。执行效果如图2所示。 图2 添加出行订单 (3)查看我的出行订单信息 查看我的出行订单:查看所录入的订单信息。包括出行日期、联系人手机号码、所有出行人信息,运行效果如图3所示。 图3 查看我的出行订单 (4)修改行程信息 可修改出行日期、联系人手机号码,要求手机号码必须为11位,否则抛出异常信息,提示“手机号码必须为11位”,运行效果如果4所示。 图4 手机号码不是11位 正确修改后,显示修改后的信息,并提示“修改成功!”。如图5所示。 图5 修改订单成功 (5)删除出行人 填写要删除的出行人姓名,执行删除操作,删除成功后给出提示“删除成功!”,如图6所示。如果输入姓名错误,则提示“对不起,定单中不包含此游客信息!”如图7所示。 图6 删除出行人成功 图7 删除出行人失败 (6)查看行程 显示本次旅行行程信息。运行效果如图8所示。 图8 查看行程 (7)退出系统 退出当前系统,显示“欢迎下次再来。”如图9所示。 三、要求与实现步骤 (一)不使用数据库,使用对象和集合存储数据 (二)定义实体类(成人订单、儿童订单、老人订单),儿童订单、老人订单为成人订单的子类。实体类至少包含但不局限于以上3个。 (三)在各实体类中均需实现各自计算订单价格、显示订单信息的方法,使用方法的重写。 (四)定义工具类,实现查看我的出行订单、添加订单、修改行程信息、删除出行人、查看行程等方法。需使用到对象传参。 (五)使用泛型集合存储所有出行人信息,使用集合的遍历实现查看订单信息、统计订单总金额、删除出行人等功能。 (六)显示信息时,只有儿童出行人需显示是否占座,需使用面向对象多态实现。 (七)修改行程信息时,当手机号码录入错误时需使用throw手动抛出异常。 (八)定义测试类,完成项目功能菜单以及整体流程,调用相应方法实现具体功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值