每天3小时学习JAVA (3)----JAVASE基本语法学习

面向对象day1

正式开始学习对象!!!

有点囫囵吞枣…感觉还有很多的原理没弄懂

对象的执行原理

请添加图片描述
先把Test.class的main放在到方法区,遇到"Student s1=new Student()"时将Student的类加载到方法区中,并在栈中产生一个Student类的s1指针,在堆中创建Student的对象,将栈中的s1指针指向堆中的该对象(存放对象在堆的地址),同时堆中的对象也会有一个类地址指向方法区中的Student类。s1为引用类型
需要用类中的方法时,先通过栈中的对象指针找到堆中的对象,在通过堆中的对象的堆指针找到方法区的对应类的方法。

类的注意事项

  1. 类的名字应该首字母大写并应用驼峰原则(与变量和方法的命名方法不同),如 ImageCar,GoodPerson

  2. 一个代码文件中,可以写多个class,但只能有一个class用public修饰,并且public修饰的类名必须要成为代码的文件名

  3. 当堆中一个对象没有任何变量指向它时就会被认为垃圾对象,与C++不同,java有自动垃圾回收机制,会自动清除垃圾对象!!!!

this指针

  1. 在类中的方法中,this指向堆中的当前类的对象 与c++类似,主要用来解决变量名字冲突
    在编译中,编译器会自动往用到了this指针的方法中添加形参 类名 this,当使用时,就把当前的对象当作this参数填入方法中:
    请添加图片描述

构造器

  1. 与c++的构造函数类似,不写构造器时,java自动生成一个无参构造器
  2. 一旦定义了有参构造器,java就不会自动生成无参构造器,需要自己手写一个无参构造器

封装 (面向对象的三大特性:封装、继承、多态)

c++学过,有点忘了…

  1. 当用类设计对象处理某个事物时,需要把处理的数据,和处理这些数据的方法放到一个对象中去,就叫封装
  2. 封装的设计规范:合理隐藏和合理暴露
    • 将变量隐藏起来(private),将处理这些变量的方法暴露(public) Java中声明类的成员变量和成员方法时不加修饰词private,默认为public

JavaBean (实体类)

  1. 实体类的定义:

    • 实体类中的成员变量都要是私有的,并向外提供对应的get()和set()

    • 并且类中必须要有一个公共的无参构造器

  2. IDE中构造器和set()|get()方法都可以自动生成,generat->Constructor|Getter and Setter

  3. 实体类只是用来保存某个事物的数据,将处理这个实体类的方法封装到另外一个类中,如class 实体类Operator(){},以此来实现数据和数据业务进行分离

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

  1. 成员变量在类中;局部变量在方法中
  2. 成员变量有默认值,无需初始化;局部变量没有默认值,使用前需要初始化
  3. 成员变量在堆中;局部变量在栈中
  4. 成员变量随对象同生同死;局部变量与方法或所属大括号内同生同死

包(package)

之前学过一点,现在学更具体一点

  1. 同一个包下的class可以直接访问

  2. 需要访问其他包下的文件需要导入包才可以,eg: import java.until.Arrays

  3. 访问多个包下的同一名字的class,第一个可以不写包名,后面一定要带,java默认只能导入一个程序
    请添加图片描述

java中的基本数据类型一定存储在栈中吗?

不一定。

  1. 当是在方法中声明的变量,即使局部变量时,每当程序调用该方法时,都会为其创建一个方法栈,其所在方法中声明的变量就在方法栈中,方法栈随方法结束而消失,所以局部变量只能存在方法中。
    • 当是基本类型的变量时,其变量名和值存储在方法栈中
    • 而当是引用类型时,方法栈中存储对象的地址,对象存储在堆中
  2. 当时在类中声明的变量时,即全局变量。
    • 当是基本类型时,其变量名和值存储在堆中
    • 当是引用类型时,栈中存储对象的地址,对象存储在堆中

String类

  1. 2种创建String对象的方法

    • 直接String a=“string”,直接用双引号赋值
    • new String(“string”),用new来创建对象,输入的参数也可以是char[],或者byte[]
  2. String常用的函数

    package src.string;
    
    public class string_samples {
        public static void main(String[] args) {
            String str="test";
            char t=str.charAt(0);
            System.out.println(t);
            // str.length().fori 简便写更快速
            for (int i = 0; i < str.length(); i++) {
                
            }
            //把字符串转变成字符数组
            char[] chars=str.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                System.out.println(chars[i]);
            }
            //比较内容
            String str1="Leo";
            String str2=new String("Leo");
            System.out.println(str1==str2); //比较指针内容,地址不一样所以显示false
            System.out.println(str1.equals(str2));//比较字符串内容,内容相同true
            String str3="leo";
            System.out.println(str1.equalsIgnoreCase(str3)); //忽略大小写比较,显示true
    
            //截取字符串
            String str4="我享受大大大大的一个";
            System.out.println(str4.substring(0,6));//从0的位置截取到6
            System.out.println(str4.substring(5));//从5截取到末尾
    
            //替换字符串
            String str5="我擦擦擦擦";
            String str6=str5.replace("擦","**");
            System.out.println(str6);
    
            //判断字符串是否包含某个关键字
            String str7="没事的,我爱你";
            System.out.println(str7.contains("爱")); //注意这是大小写敏感
    
            //判断字符串是否以某个字符串开头
            System.out.println(str7.startsWith("没事的"));
    
            //把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回
            String str8="我,你,我,他说的,真的";
            String[] s=str8.split(",");
            for (int i = 0; i < s.length; i++) {
                System.out.println(s[i]);
            }
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值