目录

六、对象的创建和使用

七、this关键字

八、static关键字

九、package和import语句

十、类的继承

十一、访问控制

十二、方法的重写

十三、super关键字

十四、继承中的构造方法

六、对象的创建和使用

其实在前面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只支持单继承,不允许多继承:一个类只能有一个基类,一个基类可以派生出多个子类

看一个例子:

  1. //首先定义一个类
  2. class person {
  3. private String name;
  4. private int age;
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8. public void setAge(int age) {
  9. this.age = age;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. }
  1. //继承刚刚定义的类
  2. public class Student extends person {
  3.  
  4. private String school;
  5.  
  6. public String getSchool() {
  7. return school;
  8. }
  9.  
  10. public void setSchool(String school) {
  11. this.school = school;
  12. }
  13.  
  14. public static void main(String arg[]) {
  15. Student student = new Student();
  16. student.setName("Jian");
  17. }
  18. }

十一、访问控制

java权限修饰符public、protected 、private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限

对于class的权限修饰只可以用public 和default(default是默认的,什么都不写就是default)

--public类可以在任意地方被访问

--default类只可以被同一个包内部的类访问

十二、方法的重写

在子类中可以根据需要对从基类中集成来的方法进行重写

重写方法必需和被重写方法具有相同方法名称、参数列表和返回类型

重写方法不能使用比被重写方法更严格的访问权限

看一个例子:

  1. //首先定义一个类
  2. class person {
  3. private String name;
  4. private int age;
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8. public void setAge(int age) {
  9. this.age = age;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. public String getInfo(){
  18. return "Name: "+name+"\n"+"age: "+age;
  19. }
  20. }
  1. //继承刚刚定义的类
  2. public class Student extends person {
  3.  
  4. private String school;
  5.  
  6. public String getSchool() {
  7. return school;
  8. }
  9.  
  10. public void setSchool(String school) {
  11. this.school = school;
  12. }
  13. public String getInfo() {
  14. return "Name: "+getName()+"\nage: "+getAge()+"\nschool: "+school;
  15. }
  16. //主方法
  17. public static void main(String arg[]) {
  18. Student student = new Student();
  19. person person = new person();
  20. person.setName("Jian");
  21. person.setAge(1000);
  22. student.setName("Jian01");
  23. student.setAge(26);
  24. student.setSchool("家里蹲大学");
  25. System.out.println(person.getInfo());
  26. System.out.println(student.getInfo());
  27. }
  28. }

输出结果为:

十三、super关键字

在java类中使用super来引用基类的成分

例如:

  1. //首先定义一个父类
  2. public class FatherClass {
  3. public int value;
  4. public void f(){
  5. value = 100;
  6. System.out.println("FatherClass.value= "+value);
  7. }
  8. }
  1. //继承父类
  2. public class ChildClass extends FatherClass {
  3. public int value;
  4. public void f() {
  5. super.f();
  6. value = 200;
  7. System.out.println("ChildClass.value= "+value);
  8. System.out.println(value);
  9. System.out.println(super.value);
  10. }
  11. //主方法
  12. public static void main(String[] args) {
  13. ChildClass cc = new ChildClass();
  14. cc.f();
  15. }
  16. }

运行结果:

十四、继承中的构造方法

子类的构造过程中必需调用其基类的构造方法

子类可以在自己的构造方法中使用super调用基类的构造方法(使用this调用本类的另外的构造方法)(如果调用super,必需写在子类构造方法的第一行)。

如果子类的构造方法中没有显示调用基类构造方法,则系统默认调用基类无参数的构造方法

如果子类构造方法中既没有显示调用基类的构造方法,而基类中有没有无参的构造方法,则编译出错

例如:

  1. //首先定义一个父类
  2. class FatherClass {
  3. private int n;
  4.  
  5. FatherClass(){
  6. System.out.println("FatherClass()");
  7. }
  8.  
  9. FatherClass(int n){
  10. System.out.println("FatherClass("+n+")");
  11. this.n = n;
  12. }
  13. }
  1. //继承父类
  2. class subClass extends FatherClass {
  3. private int n;
  4.  
  5. subClass(int n) {
  6. System.out.println("FatherClass("+n+")");
  7. this.n = n;
  8. }
  9. subClass() {
  10. super(300);
  11. System.out.println("FatherClass()");
  12. }
  13.  
  14. }
  15. //主方法
  16. public class ChildClass {
  17. public static void main(String arg[]) {
  18. subClass sc1 = new subClass();
  19. subClass sc2 = new subClass(400);
  20. }
  21. }

运行结果

sc1很容易理解

sc2为什么会先输出一个FatherClass呢?因为“如果子类的构造方法中没有显示调用基类构造方法,则系统默认调用基类无参数的构造方法”

四、java面向对象编程_2的更多相关文章

  1. Java面向对象编程基础

    一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...

  2. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  3. JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...

  4. java面向对象编程知识点总结

    一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...

  5. 【软件构造】第三章第四节 面向对象编程OOP

    第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...

  6. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  7. 《Java面向对象编程》

    <Java面向对象编程> 第11章 对象的生命周期 11.1  创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...

  8. Java面向对象编程(一)

    由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...

  9. JAVA学习(五):Java面向对象编程基础

    Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...

随机推荐

  1. Python 命令行解析工具 Argparse介绍

    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题 ...

  2. PHP使用Memcache来存储session 其他【转载】

    PHP使用Memcache来存储session 分类:PHP 时间:2015年3月30日 很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么PHP默认的 ...

  3. “Hello World!”团队第六周的第三次会议

    今天是我们团队“Hello World!”团队第六周召开的第三次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码 一 ...

  4. (第六周)课上Scrum站立会议演示

    组名:连连看 组长:张政 组员:张金生.李权.武志远 时间:2016.10.13   20:20——20:40 会议内容: 已完成的内容: 1.选定编译语言,安装软件并配置环境,完成了游戏的基本模型. ...

  5. Scrum Meeting 10.22

    Scrum Meeting No.2 今天的主要任务是配置安卓开发环境,并运行上一届的项目. 主流的安卓开发环境有eclipse+ADT+SDK和android studio两种.两种环境的文件架构似 ...

  6. 团队冲刺--Seven

    昨天: 司宇航:测试功能版块,优化功能版块. 马佳慧:优化界面 . 王金萱:合并程序. 季方:  合并程序. 今天: 司宇航:优化功能版块. 马佳慧:优化界面 . 王金萱:优化界面. 季方:  完善功 ...

  7. iOS开发学习-资源打包

    图片是被放到Images.xcassets中 1.部署版本在>=iOS8的时候,打包的资源包中的图片会被放到Assets.car 图片被压缩: 2.部署版本在<iOS8的时候,打包的资源包 ...

  8. springmvc 映射重复

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springfr ...

  9. 我的JAVA运算符理解

    基本概念 原码,反码,补码 只需要记住这几句就够了  1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码,反码,补码都一样 3.负数的反码=它的原码符号位不变,其他位取反 4.负数的补 ...

  10. windows下的C++ socket服务器(2)

    int main(int ac, char *av[]) { ); ) { exit(); } thread t; ) { int socket_fd = accept(tcp_socket, nul ...