java中面向对象的一些知识(一)
一:基本概念
举例:写一个程序,实现如下功能:
一群宠物,宠物有各种类型,如猫、狗、企鹅等
让这群宠物,按照各自的能力不同,进行各种比赛(如爬树、游泳、跳水);扩展性需求: 游泳比赛游泳池的参数、飞盘的大小和重量等 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中面向对象的一些知识(一)的更多相关文章
- java中面向对象的一些知识(二)
一. 封装的讲解 什么是封装?为什么要封装?怎么实现封装? 封装的目的是为了提高程序的安全性.封装就是把不想让第三者看的属性,方法隐藏起来. 封装的实现方法是: 1.修改属性的可见性,限制访问. 2. ...
- Java中面向对象三大特征
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...
- java中面向对象的三大特性小结
java中面向对象的三大特性:封装.继承.多态 封装 把抽象的数据和对数据的操作封装在一起,隐藏变量的实现细节.数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行访问. 1 ...
- 关于Java中面向对象章节、IO 流中的重点基础知识。
一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多 ...
- Java中面向对象的理解
按照惯例,先做一个简单的介绍,现在开始学习 Thinging in Java 4 ,一边看,一边记录,我都不想给自己设定时间安排了,毕竟很少实现过.所以就这样吧!不定期的更新,我都会放到博客中的. 所 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- JAVA中面向对象
一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...
- 2017.12.25 Java中面向对象思想的深刻理解
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...
- [转]java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
随机推荐
- Spring + SpringMVC + Druid + MyBatis 给你一个灵活的后端解决方案
生命不息,折腾不止. 折腾能遇到很多坑,填坑我理解为成长. 两个月前自己倒腾了一套用开源框架构建的 JavaWeb 后端解决方案. Spring + SpringMVC + Druid + JPA(H ...
- Ubuntu apache2.4 设置虚拟主机
每次重装系统如何配置都上网找,搞半天,都是不对的,还不如自己记下来,以作参考呢.我的项目目录是 /home/feiffy/demo/test,映射的域名是 test.com,这样在浏览器输入 test ...
- Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能对比
Linux内核suspend状态 Linux内核支持多种类型的睡眠状态,通过设置不同的模块进入低功耗模式来达到省电功能.目前存在四种模式:suspend to idle.power-on standb ...
- 如何使用DotfuscatorPro_4.9对软件进行加密
DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...
- 一个简单oop的changeTab
好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...
- Django ORM、一对一、一对多、多对多、详解
上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...
- codeforces754D Fedor and coupons
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Javascript中两个等于号和三个等于号的区别(==/===)
==//表示值的比较 ===//表示对象类型的比较 1.对于string,number等基础类型,==和===是有区别的. a)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,== ...
- Django中 如何修改models字段的默认值
场景描述: 在建表的时候,新闻表的内容简介字段,给的默认值是可以为空的,但是没有设置默认值为blank,那么,这种情况下,对于只有标题,没有内容简介的新闻来讲,发布之后,前端显示的内容简介位置是non ...
- strncpy函数使用
strncpy()函数原型:extern char *strncpy(char *dest, char *src, int n); 用法:#include <string.h> ...