Java浅滩洗脚
面向对象的概念及类与方法
一、面向对象
面向对象的概述:
面向过程:当需要实现一个功能的时候,每一个步骤都要余力余为,详细处理每一个细节。
面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经举要该功能的人,来帮我做事情。
面向对象的三大特征:封装、继承、多态
public class Demo4Face {
public static void main(String[] args) {
int[] array={1,2,3,4,5,6};
//要求输出【1,2,3,4,5,6】
//面向过程写法
System.out.print("[");
for (int i = 0; i < array.length; i++) {
if(i==array.length-1){
System.out.print(array[i]+"]");
}
else{
System.out.print(array[i]+",");
}
}
//面向对象写法,直接免去过程
System.out.println();
System.out.println(Arrays.toString(array));//调用工具类Arrays实现面向对象
}
}
面向过程:强调步骤。
面向对象:强调对象
面向对象的三大特征之封装
封装在java当中的体现
1、方法就是一种封装
2、关键字private也是一种封装。
private关键字:
本类当中依然可以随意访问,但是超出本类则不能直接访问。
其他类可以间接访问:就定义一对Getter/Setter方法
必须叫 setXXX和getXXX命名规则
对于getter来说,不能有参数,返回值类型和成员变量对应。
(对应基本类型中的boolean型,getter一定要要写成isXXX,setter不变)
对应setter来说,不能有返回值,参数理想和成员变量对应。
public class Demo10PrivatePerson {
String name;
private int age;
//age本类依然可以任意调用,但其它类需要setter和getter方法
public void setAge(int ag){
if(ag>100||ag<0){
System.out.println("输入年龄有误!");
}
else{
age=ag;
}
}
public int getAge(){
return age;
}
public void personName(String name){
System.out.println("名字:"+name+",年龄:"+age);
}
}
public class Demo10PrintPerson {
public static void main(String[] args) {
Demo10PrivatePerson pp=new Demo10PrivatePerson();
pp.setAge(21);//通过private封装年龄,就可以进行年龄数值的筛选
pp.name="小宇";
pp.personName(pp.name);
}
}
二、类和对象
类
类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事务的属性特征和行为特征拉i描述该类事务。
属性:就是事物的状态信息。
行为:就是该事物能够做什么。
列如 类:小猫
属性:名字、颜色、年龄、体重
行为:叫、跑、跳
类:对事物抽象的描述。
对象:一类事物的实列,是具体的。
类是对象的模板,对象是类的实体。
类的定义:
属性:是什么(成员变量)
行为:能做什么(成员方法)
注意:
1、成员方法直接写在类当中,成员方法外
2、成员方法没有static
对象的创建及使用
通常情况下,一个类不能直接使用,需要根据类创建一个对象才能使用
1、导包:也就是指出需要使用的类在什么位置
import 包名称.类名称;
列如:
import cn.demo.Student;
对于和当前类属于同一个包的情况,可以不写导包语句
2、对象创建:类名称 对象名=new 类名称();
3、使用:分为两种情况 :
使用成员变量 对象名.成员变量名
使用成员方法 对象名.成员方法名(参数);
(也就是想用谁就用方法名点谁)
public class Demo5Student {
public static void main(String[] args) {
Demo5Student stu = new Demo5Student();
stu.name="小宇";
stu.age=5;
stu.study();
stu.sleep();
stu.getName(stu.name);
stu.getAge(stu.age);
}
//成员变量
int age;
String name;
//创建对象
//成员方法
public void study () {
System.out.println("学生在学习~");
}
public void sleep () {
System.out.println("学生咋睡觉哦~");
}
public void getName (String name){
System.out.println("学生名字叫:" + name);
}
public void getAge(int age){
System.out.println("学生年龄为:"+age);
}
}
当一个对象作为参数时,传递到方法当中时,实际上传递进去的是对象的地址值
public class DemoDaoBao {
public static void main(String[] args) {
//创建 TOBao的对象
ToBao db=new ToBao();
db.name="小宇";
db.age=20;
db.sleep();
db.study();
db.getAge(db.age);
db.getName(db.name);
method(db);
}
//将对象作为参数传递
public static void method(ToBao print){//普通方法带有Static
System.out.println(print.name);
}
}
当对象类型作为方法的返回值类型时
public class DemoReturn {
public static void main(String[] args) {
ToBao two=getRe();
System.out.println(two.name);
}
public static ToBao getRe(){//返回值类型为对象的数据类型
ToBao one=new ToBao();
one.name="小宇";
return one;//返回对象的地址值
}
}
局部变量和成员变量的区别
1、定义的位置不一样。*
局部变量:方法的内部
成员变量:在方法的外部,直接写在类当中。
2、作用范围不一样。*
局部变量:只有方法当中可以使用
成员变量:在类当中,整个类都可以通用。
3、默认值不一样。*
局部变量:没有默认值,如果要使用必须手动赋值。
成员变量:没有赋值会有默认值。
4、内存的位置不一样
局部变量:栈内存
成员变量:堆内存
5、生命周期不一样
类当中的this关键字
this关键字的作用:
当方法的局部变量和类的成员变量重名的时候,根据就近原则,有限使用局部变量
如果需要访问本类中的成员变量,需要使用格式:
this.成员变量名
通过谁调用的方法,谁就是this;也就是说,this可以指代当前类的对象。
构造方法(专门用来创建对象的方法)
所有我们在通过关键字new创建对象时候,其实就在调用构造方法。
格式:
public 类名称 (参数类型 参数名称)
{ 方法体;
}
注意事项:
1、构造方法的名称必须和类名称一样,大小写也必须一样
2、构造方法不要写返回值类型,包括void都不写
3、构造方法不能return一个具体的返回值
4、如果没有创建构造方法,那么编译器会赠送一个构造方法,没有参数、方法体什么都不做。
5、一旦编写了至少一个构造方法,那么编译器将不再赠送。
6、构造方法也是可以进行重载的(重载overload:方法名称相同,参数不同)
public class Demo12 {
String name="Tom";
public static void main(String[] args) {
Demo12 d=new Demo12();
Demo12 d2=new Demo12(d.name);
}
//构造方法重载
public Demo12(){
System.out.println("无参构造方法执行了!");
}
public Demo12(String name){
System.out.println("含参构造方法执行了,我是:"+name);
}
}
定义一个标准的类
定义一个标准的类:
一个标准的类有四个组成部分:
1、所有的成员变量都要使用private关键字修饰
2、为每一个成员变量编写一对Getter/Setter方法
3、编写一个无参构造方法
4、编写一个含参构造方法
这样的标准也叫做Java Bean