面向对象

1.面向对象

1.1概述

面向对象是一种软件开发,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据建库系统、交互式界面、应用结构、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高层次来进行 系统建模,更贴近事物的自然运行模式。

1.2.面向对象和面向过程

面向过程 : 侧重分步骤,需要考虑完成该功能的过程,第一步做什么,第二步做什么....

面向对象 : 侧重分模块

总结 : 

面向有对象优势 : 可扩展性,可维护性,灵活性,使程序耦合度降低

缺点 : 性能比面向过程相对较差

1.3构造方法

构造方法是每个类都有的,并且用于创建该类的对象
如果该类中没有编写构造方法,那么编译器会自动帮我我们生成一个无参构造,所以当我们在写 有参构造的时候,可以手动编写一个无参构造


构造方法语句:修饰符  方法名 /类名(参数列表){1方法体}
构造方法的修饰符 我们只使用权限控制即可,不能使用static
构造方法  没有返回值,连void都没有
构造方法的方法名必须和类名一致

1.4类和对象

类:对一类事物客观描述的标准
对象:一切皆对象,是具体的个体,符合类标准的个体
根据不同属性划分为不同的类
根据不同的属性值划分不同的对象

局部变量:方法中使用,作用域也在该方法中,具有临时性,不适合长期存储,方法执行完局部变量也就销毁了
  
静态变量:类级别的变量,所有该类对象访问这个变量时,值是一样的
成员变量:对象级别的,所有该类的对象都有这个属性,但是值可能一样可能不一样

1.5对象使用

student a1 = new student();//创建对象
    a1.addrs = "河北石家庄";
    a1.age = 20;
    a1.no = 000001;
    a1.name ="序列一";
    
    student s1 = new student();
    s1.addrs = "山西";
    s1.age = 18;
    s1.name = "石";
    s1.no =000001;
    System.out.println(a1.name);
    System.out.println(s1.name);
    System.out.println(a1.age);
    System.out.println(s1.age);
    System.out.println(a1.addrs);

1.6Bean

public class _03 {
        //用户名
        private String username;//private私人的
        //密码
        private String password;
        //昵称
        private String nickname;
        
        //getters  and  setters 用来获取和修改私有化成员变量
        
        //静态上下文中没有办法使用成员属性
        public void setUsername(String username){//用来设置用户名的值,用户名是成员,方法也要用成员
            //成员方法中可以直接访问成员属性
            //在成员方法中想用对象引用就用this
            //this 就是当前对象,谁调用这个方法,this就是谁
            this.username = username;//下划线是为了区分局部变量跟成员变量
        }
        public String getUsername() {//获取username的方法,因为上面username是成员的所以也用成员的
            return username;
        }
        public String getPassword() {//获取password的方法
            return password;
        }
        public void setPassword(String password) {//设置密码的值
            this.password = password;
        }
        public String getNickname() {//获取nickname的方法
            return nickname;
        }
        public void setNickname(String nickname) {//设置昵称的值
            this.nickname = nickname;
        }    
    }

1.7实例化

实例化:就是指创建一个类的对象(实例)
User user = new User();
new会去堆内存开辟一个内存空间,用于保存成员属性
调用构造方法(栈内存压栈),对堆内存数据进行初始化赋值,如果没有传入数据,则赋予默认值
构造方法执行完后,弹栈,并把堆内存地址返回给调用处,赋值给变量user

1.加载客户端类
2.调用客户端类main方法
3.加载服务器端类(User)
4.调用User的构造方法
5.堆内存创建空间,并对成员属性初始化
6.构造方法弹栈,并把内存地址赋值给变量

1.8常见问题

public class _04 {
    public static void main (String[]args){
_03 u1 = new _03("admin","root");
u1 = null;
//一种是编译时异常
//一种是运行时异常
//java.lang.NullPointerException空指针异常,是运行时异常
//使用null 访问成员属性,就会出现空指针异常
System.out.println(u1.getUsername());
}
}

1.9对象调用静态属性

public class _05 {
static int a = 32;
int b = 33;
    public static void main(String[] args) {
        int a = 1;
        _05 o = new _05();//构造方法
        System.out.println(o.b);
        o = null;
        //可以通过对象调用静态属性
        //调用静态变量,因为在编译时,会自动把o换成对应的类名去调用
        System.out.println(o.a);
        //调用静态变量
        System.out.println(_05.a);
        //调用局部变量
        System.out.println(a);//打印1
    }
}

1.10注释事项

1.10.1静态调用成员

无法从静态上下文中引用非静态变量。

1.10.2传值和传引用

同数组

1.10.3区分成员方法和构造方法 

public class stady_06 {
    public static void main(String[] args) {
        //调用
        new stady_06();
        new stady_06(33);
//        new stady_06("");
    }
    //构造方法,修饰符可以不写
    stady_06(){
        
    }
public stady_06(int a){
    
}
//成员方法名可以和类名一样
//如何让区分同名的成员方法和构造方法呢?
//看返回值,构造方法没有返回值,连void1都没有
public void stady_06(String a){   
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值