面向对象(二)
来源:互联网 发布:淘宝水印制作教程 编辑:程序博客网 时间:2024/05/17 03:47
构造方法总结:
构造方法: 特殊方法,它的作用是在对象创建的时候自动执行一些初始化工作。
特征: a.方法名与类名一致
b.没有返回值类型,甚至连void也没有
c.不能被final static synchronized abstract等修饰
d.不可以像普通方法一样随意调用,只能在对象创建时调用一次
e.所有的类都必须有构造器(若类中没有构造器,编译器会自动添加一个无参构造器,若类中有构造器,编译器不会自动添加无参构造器)
构造器的使用:构造器可以重载
构造器间可以利用this()调用,实现连锁调用,但至少应该有一个没有使用this()(不能无限递归)
this()调用必须在第一行(有效行),保证对其他构造器的调用必须先执行。
包含构造器,对象在创建时,内存中的执行过程分析:
源程序:
内存执行过程分析:
匿名对象:创建一个对象,直接调用对象的方法,不将对象的内存地址保存在引用类型变量
匿名对象可以作为实参给方法传值。
若在方法中以对象为参数时,在方法中可以利用引用修改对象的信息。
面向对象中的两个关键字:package,import
package:告诉编译器当前源文件中的所有类最终生成class文件后,class文件保存的包目录结构。
package必须写在程序的第一行。
命名:字母全部小写
四部分:机构类型名称.机构名称.项目名称.模块名称
注:类中一旦使用了package语句,这个类的编译不一样,
javac -d . 源文件.java (在当前目录中生成package语句中指示的包目录结构)
类名不一样,在调用这个类的时候一定要写类的全限定名称(全称包名+类名)
import: 导类,建议一个一个类的导入,这样更清晰。
import作用告诉编译器,当前的源文件中要使用的其他包的类在什么包目录下面。
java.lang包中所有类都已经自动导入。
对于构造器,对象作为参数传递,package,import关键字有如下小例子供参考。
package com.atguigu.javase.javabean;/** Student类,包含id,name,gender,major属性封装, 并提供两个构造器,一个是无参的另一个是4个参数的 并添加say方法 再添加一个参数的构造器,参数是id, 在构造器中使用this(...)实现构造器的连锁调用*/public class Student { //对属性进行封装 private int id; private String name; private String gender; private String major; //无参构造器,若是自己没有定义构造器,系统会自动添加一个默认的无参构造器 public Student() { this(1); //利用this()实现构造器的连锁调用(调用,栈结构) //this()必须在有效行的第一行,保证对其他构造器的调用必须先执行 //this()不能无限递归 System.out.println("Student()...."); } //参数为id的有参构造器 public Student(int id) { this(id,"未知","未知","未知"); System.out.println("Student(int)...."); } //参数为int id, String name, String gender, String major的有参构造器 public Student(int id, String name, String gender, String major) { this.id = id; this.name = name; this.gender = gender; this.major = major; System.out.println("Student(int,String,String,String)"); } //为外界提供一个公共调用属性的方法 //id的set/get方法 public void setId(int id) { this.id = id; } public int getId() { return id; } //neme的set/get方法 public void setName(String name) { this.name = name; } public String getName() { return name; } //gender的set/get方法 public void setGender(String gender) { this.gender = gender; } public String getGender() { return gender; } //major的set/get方法 public void setMajor(String major) { this.major = major; } public String getMajor() { return major; } //将形参设置为引用类型的,如Phone ph //在该类中使用其他类的对象 public void call(Phone ph) { System.out.println(this.say() + ",在使用手机" + ph.say() + "打电话"); } //say方法 public String say() { return "学号:" + id + ",名字:" + name + ",性别:" + gender + ",专业:" + major; }}
package com.atguigu.javase.javabean;/* 写一个phone类,属性os,screen 在Student类中添加一个方法,call(Phone phone) 在测试类中调用call方法*/public class Phone { private String os; private double screen; public Phone() { } public Phone(String os, double screen) { this.os = os; this.screen = screen; } public void setOs(String os) { this.os = os; } public String getOs() { return os; } public void setScreen(double screen) { this.screen = screen; } public double getScreen() { return screen; } public String say() { return "[操作系统:" + os + ",屏幕大小:" + screen + "]"; }}
package com.atguigu.javase.test; //机构类型名.机构名称.项目名称.模块名称import com.atguigu.javase.javabean.Student; //导入Student类import com.atguigu.javase.javabean.Phone; //导入Phone类/** 在测试类中分别使用两个构造器创建两个对象, 打印输出对象的详细信息 注:1.类中一旦使用了package语句,这个类的编译不一样。 javac -d . 源文件.java 在当前目录中生成package语句中 指示的包目录结构 2.类中一旦使用了package语句这个类的类名也会不一样。 在其他类中使用该类,必须使用该类的全限定名称(全称包名+类名)*/public class StudentTest { public static void main(String[] args) { //使用无参构造器创建对象 //com.atguigu.javase.javabean.Student s1 = new com.atguigu.javase.javabean.Student(); Student s1 = new Student(); System.out.println(s1.say()); //使用4参构造器创建对象 //com.atguigu.javase.javabean.Student s2 = new com.atguigu.javase.javabean.Student(2,"沈yl","男","计算机"); Student s2 = new Student(2,"沈yl","男","计算机"); System.out.println(s2.say()); //s2.call(new com.atguigu.javase.javabean.Phone("andriod",5.0)); s2.call(new Phone("andriod",5.0)); }}
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 面向对象(二)
- 树形ListView
- 【职坐标】java IO流前传——File文件类
- 开源GIS_GeoServer前瞻
- 长整型和整形数据运算的不同
- MyEclipse如何全局搜索
- 面向对象(二)
- androidstudio使用大全
- C#中字符分隔的几种方式
- 从一个TCP抓包的例子看流量整形-概述
- (15)HTML标签详解之<p>
- 理解伪元素 :before 和 :after
- C++封装POSIX 线程库(三)线程的封装
- 7.26 iOS 基础(加法计算器布局)
- Windows环境中编译opencv3.0同时加入OpenCV_contrib库及解决遇到相关问题