疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象
1、定义类
2、创建对象、调用方法
类和对象:
某一类对象的概念定义。
比如:人类 - 抽象出来的概念(不特指某个人)
对象 - 在类的概念下产生的一个实例,它就是一个对象了.
java程序中,类是最小的程序单位 - 所有的java程序都必须从定义类开始
定义类的语法格式:
[修饰符] class 类名{
//0 ~ N 个 Field 定义
//0 ~ N 个 方法定义
//0 ~ N个 构造器定义
}
一个类中最多只能出现五种成分:Field、方法、构造器
一个类最常见的成分为:Field、方法和构造器
[修饰符] :可以省略,可以是public|final|abstract. 只有三个或省略
类名 :自定义填空,从语法角度讲只要是标识符就可以
规定约束:类名由一个或多个有意义的单词组合而成(每个单词首字母要大写),通过类名就能知道该类是做什么的
定义Field的语法格式:
[修饰符] 类型 Field名 [ = 默认值];
[修饰符] : 可以省略,还可以是public|protected|private,static,final .transient - 序列化用到
类型 : 不能省略,可以是基本类型、数组、任意类(JDK类、自定义类、接口、枚举)
Field名 :不能省略, 规定约束:类名由一个或多个有意义的单词组合而成(第一个单词首字母要小写,后面单词首字母大写)。
[ = 默认值] : 可以省略,默认值必须与它声明的类型是一致的(java是强类型语言)
定义方法的语法格式:
[修饰符] 返回值类型 方法名([0~N个形参声明]){
//0 ~ N 可执行性语句
//如果方法签名中有返回值类型声明,该方法必须包含有效的return语句
}
[修饰符] : 可以省略,可以是public|protected|private,static,final,abstract(抽象),abstract和final不能同时出现
返回值类型 : 不能省略,可以是基本类型、数组、void(声明该方法没有返回值)、任意类(JDK类、自定义类、接口、枚举)
方法名 : 不能省略, 规定约束:类名由一个或多个有意义的单词组合而成(第一个单词首字母要小写,后面单词首字母大写),通过方法名就能知道该方法是做什么的 - 应该是动词
形参声明 :每个形参声明都满足:"类型 变量"的格式,多个形参声明之间用","隔开
方法体 : 方法体中的代码必须是可执行性的代码,代码的执行是从上到下的
定义构造器的语法格式:
[修饰符] 构造器名(0 ~ N个形参声明) {
//0 ~ N 可执行性语句
}
[修饰符] : 可省略,可以是public|protected|private
构造器名 :不能省略,必须与类名相同
形参声明 : 每个形参声明都满足:"类型 变量"的格式,多个形参声明之间用","隔开
构造器执行体 : 执行体必须是可执行性的代码,代码的执行是从上到下的
构造器的作用:
构造器可以认为是一种特殊的方法,但构造器的作用是用来产生对象的。
通俗来将:但我们定义一个类之后,就需要通过构造器来获取当前类的实例。
注意点:如果程序没有为类提供任何构造器,系统会为类提供一个无参数的构造器
局部变量:方法里的局部变量、形参、代码块的局部变量
局部变量前面只能有的修饰符:final
局部变量必须由程序员来赋初始值
实例:
public class Apple{
//Field定义:[修饰符] 类型 Field名 [ = 默认值];
private int age;
protected String name;
protected static String[] subs;
double weight = 23.3;
int grade;
//grade = 2;//类中只有五种成分,它不是Field、也不是方法、构造器,所以是错的
/*
[修饰符] 返回值类型 方法名([多个形参声明]){
0 ~ N 可执行性语句
如果方法签名中有返回值类型声明,该方法必须包含有效的return语句
}
*/
String sayHello(String name){
//赋值语句属于执行性语句,可放在方法里边
//返回值类型为String,所以必须包含有效的return语句
grade = 2;
return name + ",Hello";
/*
编译时,if里的只是一个boolean型表达式
系统认为if里的return语句有可能不被执行,因此该return不算有效
除非再加上else return才能算有效,
保证在编译阶段至少要有一条语句能真正的执行才算有效的return语句
if(true){
return name + ",Hello";
}
*/
}
}
public class TestApple {
public static void main(String[] args){
//apple是定义在方法内的一个局部变量
Apple apple;
//使用局部变量前必须先赋初始值
//System.out.println(apple);
//new后面带的是一个构造器,创建一个TestApple对象
//并让apple引用变量指向TestApple对象
//TestApple对象存放在堆里的
//apple是在main方法中定义的,所以apple引用变量是保存在main方法栈中
apple = new Apple();
//要调用方法就一定要满足对方的要求(形参)
System.out.println(apple.sayHello("金山城"));
//直接打印对象,输出的必然是"类名@hashcode值"
System.out.println(apple);
}
}
疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器的更多相关文章
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- 疯狂java学习笔记之面向对象(九) - 抽象和接口
一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...
- 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量
Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...
- 疯狂java学习笔记之面向对象(七) - super关键字
super有以下两大作用: 1.起限定作用:强制去访问父类的成员(Field.方法) 2.起调用作用:指定/显示调用父类的某个构造器 super调用规则: 1.子类构造器总会调用父类构造器一次,默认情 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
随机推荐
- 一个.xib界面文件中设计有多个View
一个新建的.xib文件(Xcode's Interface Builder),有一个默认的View,也就是self.view,是主视图 其他新建的View可以在viewDidLoad()函数中使用 [ ...
- C# 类中索引器的使用二
索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便.直观的被引用.索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用.定义 ...
- hdu1014
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 //hdu1014 0ms #include<stdio.h> #include&l ...
- pyinstaller打包pyqt文件
打包pyqt文件 如何将pyqt生成exe的二进制文件呢,pyinstaller就是这样的工具 可以将脚本文件.py 文件转换为编辑后的二进制文件,在进行发布 下面说下,如果打包 一. 安装: 下载地 ...
- 理解理解python中的'*','*args','**','**kwargs'
http://blog.csdn.net/callinglove/article/details/45483097 讲了一大堆, 我也是用来理解类继承当中的参数行为的. =============== ...
- 向Word模板中填充数据
现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...
- 【leetcode】Remove Duplicates from Sorted Array
题目描述: Given a sorted array, remove the duplicates in place such that each element appear only once a ...
- 介绍n款计算机视觉库/人脸识别开源库/软件
计算机视觉库 OpenCV OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 ...
- 实现Activity刷新 (转)
目前刷新Acitivity,只想到几种方法.仅供参考,如果您有更好的方法,请赐教. 程序界面: 点击refresh view可以刷新界面,点击write content可以在EditText中自动写入 ...
- HDU 4005 The war Tarjan+dp
The war Problem Description In the war, the intelligence about the enemy is very important. Now, o ...