java-方法、面向对象引入、面向对象的特征-day07

方法

方法递归

执行方法时调用本方法

sum(5)=1+2+3+4+5
=5+4+3+2+1
5+sum(4)
4+sum(3)
3+sum(2)
2+sum(1)=1

StackOverflowError—栈溢出错误(递归次数过多)
package cn.tedu.method;

public class MethodDemo1 {

public static void main(String[] args) {
    System.out.println(sum(1000000));
}

//定义递归求和的方法
public static int sum(int m){

    //递归结束条件
    if(m==1){
        return 1;
    }

    return m+sum(m-1);//5+sum(4)
                         //   4+sum(3)
                         //      3+sum(2)
                         //         2+sum(1)
                         //             sum(1)=1
}

}

面向对象

1、概念

面向对象的本质是一种编程范式(一种思考方式)
面向过程:关注的是代码实现的过程
面向对象:把代码实现的细节整合到对象中,找到对象就能拥有这个对象的功能
面向对象基于面向过程、面向对象由于面向过程?如果场景比较简单优先推荐
面向过程,如果场景很复杂优先推荐面向对象
在这里插入图片描述

2、对象和类之间的关系

对一类对象进行抽取。把共有的特征信息抽取成了属性,把共有的行为信息抽取成了
方法,把这一类对象抽取成了类。类是对对象的概况,对象是对类的具体实现。
在这里插入图片描述

3、构造方法

1.构建对象
2.与类同名,没有返回值类型
3,有参构造用于属性初始化,支持构造方法重载
3,当类中没有定义任何形式的构造方法JVM就会在底层默认天健无参构造,
如果类中已经定义构造方法那么底层局不会定义无参构造方法
4,类中至少含有一个构造方法
在这里插入图片描述

Java所有的非静态属性和方法都要由对象调用

4.this

a. 关键字、代表当前类的对象
b、可以代表当前类还没有产生的对象、代表当前类刚创建的对象
代表当前类正在使用的对象,this是一个灵活的指代(虚拟的指代)
可以采标当前类正在活动的对象
c、this语句—在同一个类中的构造方法里调用别的构造方法–首行
package cn.tedu.object;

public class ThisDemo {
public static void main(String[] args) {
//创建对象
Student s1=new Student();
//this可以代表当前类刚创建对象
System.out.println(“s1:”+s1);
//创建对象
Student s2=new Student(“tom”);
//this是一个灵活的指代
System.out.println(“s2:”+s2);
//this指代成当前类正在使用的对象
s1.study();
}
}

//代表学生的类
class Student{
//属性
String name;
int age;
char gender;

//无参构造
public Student(){
    System.out.println("this:"+this);
}


//有参构造
public Student(int age){
    this();
}

public Student(String name){
    //调用别的构造方法
    //Student();调用不到
    //this语句---调用别的构造方法   要在首行
    this(1);
    this.name=name;
    System.out.println("this:"+this);
}

//方法
public void study(){
    //this可以代表当前类好没有创建对象
    System.out.println(this.name+"在学习...");
    //
    System.out.println("this:"+this);
}

}

5、构造代码块

a、在方法外类内{}
b、属性初始化
c.优先于所有的构造方法先执行
package cn.tedu.object;

public class ObjectDemo2 {
public static void main(String[] args) {
//
Baby b=new Baby();
//
System.out.println(b.name+","+b.age);
}

}

//代表婴儿的类–创建对象就是真实的婴儿
//要求:不管怎么出生,婴儿的名字都叫莉莉,年龄是1岁
class Baby{
//属性
String name;
int age;
char gender;

//构造代码块
//优先于所有的构造方法先执行
//属性初始化
{
    this.name="莉莉";
    this.age=1;
}

//无参构造---婴儿没有名字没有年龄
public Baby(){
    /*this.name="莉莉";
    this.age=1;*/
}

//有参构造---婴儿出生时有名字
public Baby(String name){
    //this.name=name;
   /* this.name="莉莉";
    this.age=1;*/
}

//婴儿出生时有名字也有年龄
public Baby(String name,int age){
   /* this.name=name;
    this.age=age;*/
   /* this.name="莉莉";
    this.age=1;*/
}

//方法
public void cry(){
    System.out.println(name+"在嗷嗷的哭...");
}

}

6、局部代码块

a、在方法内{}
b、控制变量的生命周期,控制内从利用率
package cn.tedu.object;

public class ObjectDemo3 {
public static void main(String[] args) {
int x=1;
//局部(方法)代码块,控制变量的生命周期
{
int y=2;
System.out.println(x+y);
}
//1000行代码没有使用上面定义变量
}
}

7、成员变量与局部变量的区别

1.位置
成员变量;方法外类内
局部变量;方法内
2.使用范围
成员变量;整个类
局部变量:整个方法
3.内存存储位置
成员变量:堆
局部变量:栈
4.生命周期
成员变量:随着类创建对象出现,随着对象被回收而消失
局部变量:当方法被调用时才出现,随着方法执行结束而消失
面向对象的特征
封装、继承、多态(抽象)
1、封装
体现形式—方法,属性私有化并且提供公共的访问方式来进行正常取值和赋值,
提高代码数据安全性。
package cn.tedu.fengzhuang;

public class FZDemo {
public static void main(String[] args) {
//创建代表人的类的对象
Person p=new Person();
//给对象属性赋值
//p.name=“豆豆”;
//调用方法间接给私有化属性进行赋值
p.setAge(-10);
//p.gender=‘男’;
//调用方法间接给私有化属性进行取值
//System.out.println(p.name+","+p.getAge()+","+p.gender);
}
}
//代表人的类
class Person{
//属性
private String name;
//私有化属性,只能在本类中直接使用
private int age;
private char gender;

//Alt+Insert---Generate---Getter and Setter
//java自动提供
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public char getGender() {
    return gender;
}

public void setGender(char gender) {
    this.gender = gender;
}

/* //定义方法间接的给私有化属性进行赋值
public void setAge(int age){
if(age<0){
System.out.println(“数据有误!!!”);
}else {
this.age=age;
}
}

//定义方法间接的给私有化属性进行取值
public int getAge(){
    return age;
}*/


/*//有参构造
public Person(int age){
    if(age<0){
        System.out.println("数据有误!!!");
    }else {
        this.age=age;
    }
}*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值