一:基本概念

举例:写一个程序,实现如下功能:
一群宠物,宠物有各种类型,如猫、狗、企鹅等
让这群宠物,按照各自的能力不同,进行各种比赛(如爬树、游泳、跳水);扩展性需求: 游泳比赛游泳池的参数、飞盘的大小和重量等 1.首先从里面抽象出名词性的概念(需求分析,抽取概念模型)
宠物、猫、狗、企鹅、比赛、能力、宠物类型   2. 把名词抽象成相应的class,或class的属性    3.提取动词 -------------------- 把这些动词,抽象成对象的行为
  爬树、游泳、跳水
类和对象的关系:
类是用于描述同一类的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
下面看一段代码
package com.chen.biz;
/**
* 构建了一个宠物类
*
* @author 陈家小哥
*
*/
public class Pet {
private String name; // 宠物的名字
private String sex; // 宠物的性别 //构造函数(空的)
public Pet() {
// TODO Auto-generated constructor stub
}
/**
* 方法
* 宠物都可以玩游戏
* @param pet
*/
public void playGame(Pet pet){
}
}
 构造函数:
创建一个对象,必须调用它的构造函数。当一个类中没有构造函数时,会自动生成一个空的构造函数。 
构造函数的作用:给成员变量进行初始化。如果没有给成员变量初始化,系统会分配默认值给这些成员变量。
二:常量和变量


常量:永远不会改变(static final)
      编译期常量(static final):在程序编译的时候,所有调用常量的位置,都被常量代表的值所替换 , 最大的好处是节省内存
程序运行期常量(final):一次赋值之后,永远不能改变
常量的命名一定要大写 ,如名字较长,用下划线进行间隔 SEX_MALE
变量
1.局部变量:通过参数传入或者在方法中定义
public void Play(String name){
string age; //局部变量
System.out.print(name); //name也是局部变量
}
局部变量的作用域是该变量所在的{}  。
局部变量的生命期:
基本类型:超出局部变量定义的{},就会被标识为无效,等待GC来回收。
引用类型:超出局部变量定义的{},会引用计数-1,如果引用计数为0,就会被GC下次扫描时回收。
2.成员变量(对象变量)
成员变量是定义咋方法外的变量。
public class Pet {
private String name; // 宠物的名字 成员变量
private String sex; // 宠物的性别 成员变量
/**
* 方法
* 宠物都可以玩游戏
* @param pet
*/
public void playGame(String cc){
System.out.println(cc);
}
}
成员变量的作用域:就是所在class内的所有方法
成员变量的生命期:与它所在的对象的生命期一致 在没有static静态变量的情况下程序运行顺序如下:
1.系统给属性赋默认值
2.用户在成员变量级直接赋默认值
3.在构造函数中对成员变量进行初始化。
static变量:
1.称为类变量,它是所有对象共享的内存;
2.不需要类的实例,可以直接通过类的名字调用。
3.作用域类似于全局变量
4.在第一次调用这个变量时,分配内存。 下面是几个小例子:
public class Test {
public static final double PAI = 3.1415926; //静态常量
public final double PAI2 = 3.1415926;//常量
public static double PAI3 = 3.1415926;//静态变量 public Test(){ }
}
public class Test {
public static final double PAI;
public final double PAI2;
public static double PAI3; public Test(){
this.PAI = 3.1415926; //错误,必须在定义时就赋值
this.PAI2 = 3.1415926; //可以,初始化赋值。
this.PAI3 = 3.1415926;//不可以 不能再构造方法中给静态变量赋值,因为静态变量加载时可能这个类并没有被加载。
}
}
public class Test {
public static final double PAI = 3.1415926;
public final double PAI2 = 3.1415926;;
public static double PAI3 = 3.1415926;;
public double PAI4 = 3.1415926; public static void test(){
this.PAI = 3.14;
this.PAI2 = 3.14;
this.PAI3 = 3.14;
this.PAI4 = 3.14; //均存在错误,因为静态方法中不可以用this关键字
}
}
public class Test {
public static final double PAI;
public final double PAI2;
public static double PAI3 = 3.1415926;; public static void test(){
PAI = 3.14; //编译期常量不能在这赋值
PAI2 = 3.14; //静态方法不能直接调用成员变量,原因是这个成员变量还没有分配内存,需要通过对象调用
PAI3 = 3.14; //静态方法调用静态变量OK
}
package com.chen.test;
/**
* 说出输出顺序
* @author 陈家小哥
*
*/
public class Test extends A {
int num = 7777;
private static A mm = new A();
static {
System.out.println("1111");
}
{
System.out.println("2222");
} public Test() {
System.out.println("3333");
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.num);
}
} class A {
int num = 5555; public A() {
System.out.println(num);
}
}
输出结果:
5555
1111
5555
2222
3333
7777
解释:当类被加载时,先初始化静态的变量,输出5555和1111,然后调用父类的构造函数,输出5555,然后输出2222,最后调用子类的构造函数,输出子类的成员变量。
 
 
 

java中面向对象的一些知识(一)的更多相关文章

  1. java中面向对象的一些知识(二)

    一. 封装的讲解 什么是封装?为什么要封装?怎么实现封装? 封装的目的是为了提高程序的安全性.封装就是把不想让第三者看的属性,方法隐藏起来. 封装的实现方法是: 1.修改属性的可见性,限制访问. 2. ...

  2. Java中面向对象三大特征

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...

  3. java中面向对象的三大特性小结

    java中面向对象的三大特性:封装.继承.多态 封装 把抽象的数据和对数据的操作封装在一起,隐藏变量的实现细节.数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行访问. 1 ...

  4. 关于Java中面向对象章节、IO 流中的重点基础知识。

    一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多 ...

  5. Java中面向对象的理解

    按照惯例,先做一个简单的介绍,现在开始学习 Thinging in Java 4 ,一边看,一边记录,我都不想给自己设定时间安排了,毕竟很少实现过.所以就这样吧!不定期的更新,我都会放到博客中的. 所 ...

  6. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  7. JAVA中面向对象

    一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符  返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...

  8. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  9. [转]java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

随机推荐

  1. Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术

    回到目录 两雄争霸 使用StackExchange.Redis的原因是因为它开源,免费,而对于商业化的ServiceStack.Redis,它将一步步被前者取代,开源将是一种趋势,商业化也值得被我们尊 ...

  2. 从2G到5G, 基站天线过去与未来

    在蜂窝移动通信系统中,天线是电路信号与空间辐射电磁波的转换器,是移动通信系统的末梢关键组成部分. 从2G到4G,移动基站天线经历了全向天线.定向单极化天线.定向双极化天线.电调单极化天线.电调双极化天 ...

  3. Android开发之import org.apache.http

    在build.gradle(app)中添加一下依赖: android { useLibrary 'org.apache.http.legacy' } dependencies { compile 'o ...

  4. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  5. 【C#】安装windows服务

    参考:http://blog.csdn.net ,http://blog.csdn.net/dyzcode 1.新建 visual studio insaller 项目2.添加 [文件系统]3.添加 ...

  6. array

    1.array() //创建数组 2.array_change_key_case($arr,CASE_UPPER); //将键名全部大写,不加参数全变小写--没啥用 3.array_chunk($ar ...

  7. Django ORM、一对一、一对多、多对多、详解

    上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...

  8. 【BZOJ 2595】【WC 2008】游览计划

    http://www.lydsy.com/JudgeOnline/problem.php?id=2595 斯坦纳树的例题诶...我怎么做了好长时间_(:з」∠)_ 首先这是一棵树. 状压表示状态,\( ...

  9. [CI] 使用Jenkins自动编译部署web应用

    写在前面 初步接触持续集成自动化过程,本篇主要介绍基于Jenkins实现持续集成的方式,通过案例介绍线上自动编译及部署的配置过程 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作 ...

  10. 如何做好PMO,PMO分哪些方面?

    谢邀! 理论的东西,中国PMO大会的帐号说的很全面了. 我分享一些个人感受.失败经验: 我曾帮助中国区COO创立过PMO并且运营两年,COO离职后终止. 成功案例: 我曾看过总部老大们设立Busine ...