• 封装和构造方法


    类与对象的关系
    产生一个对像必须new一次
     
    类名首字母大写
     
    面向对象的三大特征:封装 继承 多态
    二,为什么java中需要封装?
    数据的有效性和安全性
    保护数据的有效性和安全性,所以java中需要封装
    三,什么是封装?
    第一层含义:对象的属性和方法是一个统一的整体,不可分割
    第二层含义:封装是一种保护数据的机制
    四,怎么样使用封装保护数据?
    属性封装:
    以前 String name;
    现在 : (1)private String name;?//私有的,只有自己可以用,其他类拿不到对象的属性
    (2)提供共有的set/get方法访问属性
    总结:一个类的所有属性默认情况下都必须封装
    方法封装:
    (1)把方法的public 改为private
    (2 )提供公有的方法间接的调用私有的方法
    总结:一个类中只有不想暴露给别人的方法才需要封装
    public class Test{
    private String name;
    private int age;
    //set方法:给属性赋值
    //get方法:获取属性值
    //一个类的set方法格式:
    public void set属性名(参数){
    属性=参数值;
    }
    //一个类的get方法格式:
    public 返回值类型 get属性名(){
    return 属性;
    }
    public void setName(String name){
    //区分属性 属性前面加this this.name 这个就是属性
    //规则:取名字的规则
    if(name.equals("王八蛋")){
    System.out.println("名字无效");
    }else{
    this.name=name;
    }
    name=name;
    }
    public String getName(){
    return name;
    }
     
     
    }
    总结:一个类的所有属性默认情况下都必须封装
    命名规则,驼峰规则
     
    public //公开的意思 就可以被其他类访问
    //如果一个行为没有必要暴露给别人 那么就可以吧这个行为
    //设置为私有行为
    private void f(){
    }
    如果外部需要访问怎么办?
    提供公有的方法
    public void r(int money ){
    f();
    }
    一个类中的方法1调用方法2,只要写方法2的名字就可以了
     
    -----------------------------------------------------------------------
    一,为什么需要构造方法?
    人-----------出生行为:产生人
    对象---------出生行为:产生对象
    人是人他妈生的 对象是对象他妈生的
    对象必须通过出生的行为才能产生!!!
    出生的行为-----构造行为-------构造方法
    总计:就是因为我们要的对象必须通过构造才能产生,所以一个类必须要有构造方法
    二、什么事构造方法
    1构造方法是一个方法
    2,构造方法是没有返回值类型,在new对象的时候被系统自动调用
    返回值为空和没有返回值是两回事
    三,为什么我们之前写类没有写构造方法,也可以new出对象?
    (1)情况一:我们没有写构造方法
    public class Person{
    //我们不写构造方法,计算机自动帮我们添加的,也就是说写不写都存在
    public Person(){}
    }
    这个构造方法写不写都存在,这个方法没有什么意思,只是为了描述对象产生的过程
    (2)情况二:我们写了构造方法
    public class Person{
    //我们写了构造方法,系统不会再自动添加构造方法,就用我们自己定义的构造方法
    public Person(){
    System.out.println("对象产生了");
    }
    public class Test{
    public staic void main(String[] args){
    Person person=new Person();//自动调用无参数构造方法
    }
    }
     
    }
     
    四、怎么样写构造方法------一个类可以有多个构造方法
    public 类型(参数){//参数可以有多个
    //方法体-----描述对象产生的过程
    }
    当类有多个构造方法 是通过构造方法的参数来决定调用哪一个构造方法
    构造方法,一个对象只会调用以个构造方法
    五、构造方法的意义?
    1、构造方法是用来描述对象出生的过程的
    2、初始化对象(给属性赋值的过程就叫对象初始化)
    (set方法是不是也可以对对象进行初始化)
    两者有什么区别?
    构造方法初始化特点:
    1、构造方法只能给属性赋值 不能改变属性值
    Person person=new Person("张三");
    //能不能通过构造方法改变属性值?李四
    //下面不是改变属性值 是产生新的对象 名字叫李四
    //person =new Person(“李四”);
     
    非法字符报错,一定是你的代码里面出现了中文
    2、构造方法可以一次性给多个属性赋值
     
    set 方法的特定:
    1、一次只能给一个属性赋值
    2、set方法赋值可以不断改变属性值
     
    ----------------------------------------
    数据类型:基本类型和引用类型
    基本类型: 8种
     
    byte(1)short(2)int(4)long(8)
    double(8),float(4),char(2), boolean(1)
    基本类型就是指天生就有的 最基本的
    开辟空间:定义的时候开辟内存空间 定义变量的时候
    释放内存:超出变量的作用范围就会立即释放内存空间
     
    java中内存划分为5个区域:方法区 java栈区 本地方法栈
    堆区 程序计数器
     
    1、基本类型:只会在栈中开空间
    int a;
    a=5;
    方法中的变量为局部变量
    类的属性为全局变量
    变量的作用范围只会在大括号里面有效,在大括号结束后无效了
     
    2 引用类型:除了8种基本类型 其他都是引用类型
    String Scanner Random Arrays 自定义类 数组
    Person person= new Person();
    引用 对象
    引用类型即会在堆中开空间,也会在栈中开空间
     
    引用类型开辟内存:是在new对象的时候开辟内存空间
    释放内存:当我们的引用不再指向任何的对象的时候,垃圾回收程序会在适当的时间释放内存空间
    垃圾回收程序:主要用来释放栈空间
    1、内存快满的时候,会执行垃圾回收程序
    2、空闲的时候
    person之前叫变量,现在叫引用
    new Person()叫对象
    什么是引用,引用什么意思
    引用就是对象地址
    引用类型:既会在栈中开空间也会在堆中开空间
    Person person= new Person();//对象的属性是有默认值的
    对象创建在堆内存中,开辟的内存空间名字是16进制的,例子0x0101
    为什么名字是16进制,因为堆内存中的地址是由系统管理的,系统命名的
    名字和内存地址是一个意思
     
     
    三char的两重身份:本身和编码(AscII码)
    AscII码:计算机专家没事干,为每一个字符设置一个编号 这个编号就叫AscII码
    char c='a';
    System.out.println(c);'a'
    char c=97;
    System.out.println(c);'a'
     
    char c='a'+3;
     
    System.out.println(c);'d'//字符类型适和加法,也适合减法,除法,乘法,适合算术运算
     
    葵花宝典:
    ‘A’ 65 怒我
    'a' 97 就去
    ‘0’ 48 死吧
     
    五 ,默认值?
    1、变量? 没有默认值-----定义在方法中的
    int a;
    System.out.println(a); 报错
    2、属性?有默认值 ------定义在类中的 类中的变量叫属性,方法中的变量
    int o
    String null
    double 0.0
    char AscII码为0的字符
     
    3,数组? 有默认值
    int[] 0 double[] 0.0 String[] null
    int[] arr=new int[4]
    System.out.println(arr[1]);输出0
     
     
    六 局部变量:指一个变量只有有限的范围内有效超出这个范围就相当于没有
    情况1:
    int a=100;全局变量
    if(1<2){
    int a=99;局部变量
    }
    运行:报错
    原因:因为全局变量的作用范围:从他产生开始到大括号结束
    这个名字为a的变量还是存在的,再去内存中定义一个相同名字的变量就会报错
    情况2:
    if(1<2){
    int a=99;局部变量
    }
    int a=100;全局变量
    运行:正确,
    因为局部变量的无效了,即内存释放掉了,才能再创建一个名字一模一样的变量
    如果一个方法变量a的还是有效的,再去定义一个变量a就会程序报错,因为一但能创建java不知道a对应的是那个内存
    总结:也就说变量的有效无效本质指的是内存空间还在不在
     
    情况3:
    for(int i ; i<100;i++){
    }
    System.out.println(i);报错
     
    打印a的属性:a为对象,且a类中有toString()方法
    System.out.println(a); //自动调用toString方法
    System.out.println(a.toString());两句代码是等价的,是一个意思
     
     
    a类中没有写toString()方法,程序就会打印哈希code码,如上图
     
    补充:
    Person p=new Person();
    System.out.println(p);//自动调用toString();
    如果Person类中写了toString方法,就是输出toString方法的内容
    如果没有定义toString方法 那么输出对象的地址的整数形式(父类的toString)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    VirtualBox设置共享文件夹和镜像访问的方法
    虚拟机文件越来越大解决方案
    linux磁盘清理方法 Linux 下垃圾清理工具 BleachBit
    linux上怎么切换不同版本的arm-linux-gcc?只需改一行函数
    windows桌面添加右键环境
    各种机械键盘轴的差别,究竟什么轴好
    XML是什么,它能够做什么?——写给XML入门者
    MATLAB中导入数据:importdata函数
    理解ThreadLocal
    Leetcode:best_time_to_buy_and_sell_stock_II题解
  • 原文地址:https://www.cnblogs.com/xuanjian-91/p/5937071.html
Copyright © 2020-2023  润新知