四、java面向对象编程_2
目录
六、对象的创建和使用
其实在前面1-5中已经提到了对象的创建和使用,以及对内存进行了分析
需要注意的是:
- 必需使用new关键字创建对象
- 使用对象引用.成员变量来引用对象的成员变量
- 使用对象引用.方法(参数列表)来调用对象的方法
- 同一类的每个对象有不同的成员变量存储空间
- 同一类的每个对象共享该类方法(非静态方法是针对每个对象进行调用)
七、this关键字
在类的方法定义中使用的this关键字代表使用该方法的对象的引用
当必需指出当前使用方法的对象是谁时要使用this
有时使用this可以处理方法中成员变量和参数重名的情况(当成员变量和局部变量重名的时候在方法中使用this表示该方法所在类的成员变量)
this可以看作是一个变量,他的值是当前对象的引用
八、static关键字
在类中,用static声明的成员变量为静态成员变量,他为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份,由于是公共变量,所以尤其要注意变量在内存中值的变化
用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以static方法中不可访问非static的成员。(静态方法不再是针对某个对象调用,所以不能访问非静态成员)
可以通过对象引用或类名(不需要实例化)访问静态成员(类名.静态对象)
九、package和import语句
为了管理大型软件系统中数目众多的类,解决类的命名冲突问题,java引入包(package)机制,提供类的多重命名空间
package语句作为java原文件的第一条语句,致命该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)
它的格式是:package pkg1[.pkg2[.pkg3…]];
java编译器把包对应于文件系统的目录管理,package语句中,用”.”来致命包的层次例如:package com.jian; //该文件中所有的类位于.\com\jian目录下
注意:
如果将一个类打包,则使用该类时,必需使用该类的全名(例如:com.jian.Myclass),jav编译器才会找到该类
也可以使用import在文件的开头引入要使用的类;例如:import com.jian.MyClass
可以不需要用import语句直接使用java.lang包中的类
总结:
1.如果想将一个类放入包中,在这个类原文件第一句话写package
2.必需保证该类的classweb年间位于正确的目录下
该类的源码可能会产生影响
3.另外的类想访问的话
写全名
引入
*或者写具体类名
访问位于同一个包中的类不需要引入
4.必需class文件的最上层包的父母路位于classPath下(涉及到环境变量问题)
5.在cmd中执行一个类的时候也是需要写全包名的
jdk包中主要的包介绍:
java.lang
包含一些java语言的核心类,如String、Math。Interger、System和Thread,提供常用功能
java.awt
包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面,也就是GUI
java.applet
包含applet运行所需的一些类
java.net
包含执行与网络相关的操作的类
java.io
包含能提供多种输入/输出功能的类
java.until
包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数
- 可以使用jar –cvf xx.jar *.*命令将自己的java文件(.class)打包成jar文件(可以使用jar -help来查看该命令详细参数)
- 可以将整个jar包作为classPath设置到环境变量中这样就可以直接在cmd中进行调用
十、类的继承
java中使用extends关键字实现类的集成机制,其语法规则为:
<modifier> class <name> [extends <superClass>]{……}
通过继承,子类自动拥有了基类(superClass)的所有成员(成员变量和方法),但是对于私有变量private只有访问权,没有使用权,不可以对这种变量进行操作
java只支持单继承,不允许多继承:一个类只能有一个基类,一个基类可以派生出多个子类
看一个例子:
//首先定义一个类
class person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
//继承刚刚定义的类
public class Student extends person { private String school; public String getSchool() {
return school;
} public void setSchool(String school) {
this.school = school;
} public static void main(String arg[]) {
Student student = new Student();
student.setName("Jian");
}
}
十一、访问控制
java权限修饰符public、protected 、private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限
对于class的权限修饰只可以用public 和default(default是默认的,什么都不写就是default)
--public类可以在任意地方被访问
--default类只可以被同一个包内部的类访问
十二、方法的重写
在子类中可以根据需要对从基类中集成来的方法进行重写
重写方法必需和被重写方法具有相同方法名称、参数列表和返回类型
重写方法不能使用比被重写方法更严格的访问权限
看一个例子:
//首先定义一个类
class person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getInfo(){
return "Name: "+name+"\n"+"age: "+age;
}
}
//继承刚刚定义的类
public class Student extends person { private String school; public String getSchool() {
return school;
} public void setSchool(String school) {
this.school = school;
}
public String getInfo() {
return "Name: "+getName()+"\nage: "+getAge()+"\nschool: "+school;
}
//主方法
public static void main(String arg[]) {
Student student = new Student();
person person = new person();
person.setName("Jian");
person.setAge(1000);
student.setName("Jian01");
student.setAge(26);
student.setSchool("家里蹲大学");
System.out.println(person.getInfo());
System.out.println(student.getInfo());
}
}
输出结果为:
十三、super关键字
在java类中使用super来引用基类的成分
例如:
//首先定义一个父类
public class FatherClass {
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.value= "+value);
}
}
//继承父类
public class ChildClass extends FatherClass {
public int value;
public void f() {
super.f();
value = 200;
System.out.println("ChildClass.value= "+value);
System.out.println(value);
System.out.println(super.value);
}
//主方法
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.f();
}
}
运行结果:
十四、继承中的构造方法
子类的构造过程中必需调用其基类的构造方法
子类可以在自己的构造方法中使用super调用基类的构造方法(使用this调用本类的另外的构造方法)(如果调用super,必需写在子类构造方法的第一行)。
如果子类的构造方法中没有显示调用基类构造方法,则系统默认调用基类无参数的构造方法
如果子类构造方法中既没有显示调用基类的构造方法,而基类中有没有无参的构造方法,则编译出错
例如:
//首先定义一个父类
class FatherClass {
private int n; FatherClass(){
System.out.println("FatherClass()");
} FatherClass(int n){
System.out.println("FatherClass("+n+")");
this.n = n;
}
}
//继承父类
class subClass extends FatherClass {
private int n; subClass(int n) {
System.out.println("FatherClass("+n+")");
this.n = n;
}
subClass() {
super(300);
System.out.println("FatherClass()");
} }
//主方法
public class ChildClass {
public static void main(String arg[]) {
subClass sc1 = new subClass();
subClass sc2 = new subClass(400);
}
}
运行结果
sc1很容易理解
sc2为什么会先输出一个FatherClass呢?因为“如果子类的构造方法中没有显示调用基类构造方法,则系统默认调用基类无参数的构造方法”
四、java面向对象编程_2的更多相关文章
- Java面向对象编程基础
一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...
- JAVA面向对象编程课程设计——网络版单机斗地主
一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...
- JAVA面向对象编程课程设计——web版斗地主
一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...
- java面向对象编程知识点总结
一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...
- 【软件构造】第三章第四节 面向对象编程OOP
第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...
- java 面向对象编程。。。。
经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...
- 《Java面向对象编程》
<Java面向对象编程> 第11章 对象的生命周期 11.1 创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...
- Java面向对象编程(一)
由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...
- JAVA学习(五):Java面向对象编程基础
Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...
随机推荐
- sprint2(第二天)
昨天没有想到餐桌的功能,今天加到展板.然后今天我们完成了餐桌模板,可以实现添加桌子的桌号.人数.修改和删除功能.不过由于今天学校网络不是很好,晚上我们clone了很久都没clone下来,所以没有上传代 ...
- Daily Scrum8 11.12
昨天的任务已完成. 今日任务: 徐钧鸿:个人作业 张艺:构建带有用户管理的框架,并将后端移植好的代码连结. 黄可嵩:完成搜索移植 徐方宇:研究httpclient如何运作,如何利用它实现服务器和客户端 ...
- 【Alpha】阶段第七次Scrum Meeting
[Alpha]阶段第七次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 增加上课信息接口 编写按学院搜索课程接口 赵智源 构建后测试点测试框架 构建前测试点测试 ...
- [BUAA_SE_2017]结对项目-数独程序扩展
结对项目-数独程序扩展 Runnable on x64 Only sudoku17.txt 须放置在可执行文件同目录中,可移步以下链接进行下载 Core-Github项目地址 GUI-Github项目 ...
- 冲刺One之站立会议5 /2015-5-18
2015-5-18 服务器部分大体已经完工,现在我们主要是在把登陆界面和服务器组装起来,这个过程是很让人头痛的,以为其中涉及到了很多网络协议.网络编程的知识,由于之前我们没有接触过所以实现起来会觉得很 ...
- Servlet 3.0 对异步处理的支持
Servlet 3.0 实现了对异步处理的支持 通过利用注解@WebServlet(urlPatterns="/AServlet" AysnsSupported=true) 让后n ...
- ns3 回调机制
(1)目的:为了实现两个模块之间的通信(这两个模块没有任何依赖关系) (2) C语言中的函数指针 int (*a)(int q) = 0; //声明一个函数指针a,初始值设为0 //. //. //. ...
- Docker的volume机制实现容器数据的持久性存储
1:可以启动一个容器的时候,临时指定挂载的volume,这个volume会自动创建,无需在宿主机上事先创建 docker run -it -v /busybox busybox:latest 登入到b ...
- 0422数学口袋精灵bug发现
团队成员的博客园地址: 蔡彩虹:http://home.cnblogs.com/u/caicaihong/ 曾治业:http://www.cnblogs.com/zzy999/ 蓝叶:http://w ...
- 复利计算测试(C语言)
对我们和复利计算程序,写单元测试. 有哪些场景? 期待的返回值 写测试程序. 运行测试. 测试模块 测试输入 预期结果 运行结果 bug跟踪 计算终值 (本金,年限,利率) 终值 1 (100 ...