java-面向对象初
发布日期:2021-05-04 14:57:13 浏览次数:27 分类:技术文章

本文共 5454 字,大约阅读时间需要 18 分钟。

文章目录

零.关于面向对象和面向过程的大致区别

1.c语言完全的面向过程,java是面向对象

2.面向过程的开发不容易扩展
3.面向对象的开发扩展力高
4.例子

  • -面向过程:蛋炒饭 =不容易将饭和米分开
  • -面向对象:蛋包饭 =容易分开
  • -面向过程:手洗衣服 = 过程复杂,全部自己动工
  • -面向对象:洗衣机洗 = 过程简单,由你操纵的对象完成

一.关于 “栈”“堆”“方法区” 的大致解释

1.栈

  • 栈相当于一种临时的储存空间,在一个方法使用完毕过后就释放出来
  • 在一个方法被使用的时候需要在“栈”开辟一块空间
  • 先进后出,先进来的就在最下面(最后出去)。

2.堆

  • 任何以new xxx 开辟的空间都是在对空间开辟的,可以长期存在,直到文件结束

  • 例如

    -int[] b =new int[5];
    b所代表的是在堆空面开辟出来空间的地址
    -phone data=new phone(); 【假设有一个phone的类已经被导入】
    data代表的是堆里面开辟出来的地址;

  • 所以这些变量名就是地址,那么在方法之间传递这些地址时,是可以直接改变堆里面的值(相当于c语言的全局变量)

  • 如果不同的对象同时指向一个类

    -phone data1=new phone();
    phone data2=new phone();
    -上面说了,每一个new都是在“堆”里面开辟的,所以以上格式会开辟两个完全不同的空间(地址),互不干扰;

  • 如果一个对象指向另一个对象

    -phone data1=new phone();
    phone data2=data1;
    -这个表示的是data1的地址传递给了data2,那么对data2进行操作也是对堆里面data1开辟的“堆”空间进行操作

3.方法区

  • 所有的方法都在方法区里面,倘若要拿出来用,就(压栈)在“栈”空间里面开辟,main方法是第一个
  • 方法被使用完后,就(弹栈)从“栈”空间释放出来;

二.对象类型的使用

1.对象类型作为方法参数

  • -phone one=new phone();
    method(one);
    -假设这里的method为
    public void method(phone two){
    }
    -那么传入的one,为one =new phone()的地址
    所以在method里面中的形参two的对象是同一个new phone(跟one指向的一样)

2.对象类型作为返回值

  • -phone one=method()
    -假设这里的method为:
    public phone method(){
    phone two=new phone();
    return two;
    }
    -那么返回的two为two =new phone()的地址
    所以one的地址和two的地址是一样的,指向的都是堆中同一个new phone

三.作用范围

1.成员变量和局部变量

  • m在方法外面定义的变量是成员变量(类似于全局变量)
    在方法类的变量为局部变量
  • 默认值的区别,成员变量有默认值,而局部变量没有默认值
  • 生命周期的不同
    -成员变量:是伴随着对象的出现而出现,消失而消失
    -局部变量:是伴随着方法进栈,然后随方法的消失而消失

2.private关键字

  • 他可以使变量的访问范围缩小成只能在本class中,不能跨文件访问

    -private int age; 这样的话在其他文件就不能访问age,但在本文件可以

  • 但是可以通过方法来间接访问

    -public void setAge(int num){
    age=num;
    }
    这样的话就可以通过setAge方法来间接访问了
    好处是我可以在setAge方法里面对num数字是否合理进行判断
    -public void setAge(int num){
    if(num>0)age=num;
    else System.out.println(“输入数据不合法”);
    }

  • 总结getter/setter方法

    -必须是setAaa/getAaa命名
    -setter不能有返回值
    -getter不能有参数,注意返回类型

四.构造方法

1.在定义一个对象的时候,倘若在类里面没有定义构造方法,那么系统会“送”一个构造方法

2.构造方法的格式,名称和类名一样,并且不加类型名

3.

public class StudentMethod {   			private String name;			private int age;			public StudentMethod(){   					System.out.println("无参数构造方法运行成功");				}			public StudentMethod(String name,int age){   					System.out.println("有参数构造方法成功");					this.age=age;					this.name=name;				}**

4.在使用的时候这样定义

StudentMethod stu1=new StudentMethod();	System.out.println("=================");	StudentMethod stu2=new StudentMethod("小波",18);

5.那么stu1,和stu2是两个不同的对象

伍.Scanner的使用方法

1.Scanner是一个jdk自带的类,使用使用它跟使用对象差不都

2.首先要导包:在pakage下面,类上面

import java.utli.Scanner;

**3.创建对象:跟平常的创建对象一样,注意的是传入的参数是

System.int			Sanner add=new Sanner(System.in);

4.使用方法:分别为字符串和数字add.next()和add.nextInt();

String str=add.next();			int aa=add.nextInt();

六.匿名对象

1.定义方法:new Method().name;

不同的地方就是没有一个变量去表示它
2.只能使用一次,因为第二次没有办法调用它
3.用处不多,如果只需要使用一次就可以,比如打印里面的东西一次;

七.随机数,Random

1.导包: import java.util,Random;

2.创建: Random r=new Random();
3.使用: int sum = r.nextInt(); :获取的数字每次都不同,且在int范围内
4.使用: int sum = r.nextInt(3); :[0,3)左闭右开区间。

八.ArrayList

1.导包: import java.util.ArrayList

2.创建: ArrayList data=new ArrayList<>();
其中尖括号里面的表示存储的数据类型
3.使用:

  • 添加数据
    *System.out.print(data); :打印结果为[],没有数据
    *data.add(“洛”);
    *data.add(“小波”);
    *System.out.print(data); :打印结果为[洛,小波];
  • 获取数据
    *String s=data.get(1); :获取的数据从0开始,那么这一个是夏小波
  • 删除数据
    *data.remove(0); :被删除的是洛
    *System.out.print(data); :打印出来{小波};

4.总结

  • 添加: public boolean add(E e); 向集合中添加元素,类型和泛型一致(上面<>里面的类型)
  • 获取: public E get(int index); 向集合获取元素,参数是索引编号(0开始),返回的就是对于元素
  • 删除: public E remove(int index);向集合删除元素,参数是索引编号(0开始),返回的就是对于元素
  • 长度: public int size(); 获取集合的尺寸长度,返回的的元素个数

5.注意事项

  • ,E只能是“包装类”,不能是基本类型,因为里面存储的其实是地址
  • 由于基本类型是在java.long里面的,所以将它们大写就相当于使用了它们的“包装类”
  • int Integer
    char Character
    其余的基本类型只要将首字母大写就可以了
  • 使用方法:
    ArrayList dataA=new ArrayList

九.字符串String

1.字符串的类容永不可变【重点】

2.正式因为字符串的类容不可变,所以字符串是可以

3.字符串相当于char[]字符数组,但是底层的原理是byte[]字节数组

4.创建字符串的常见3+1种方式

  • 三种构造方法

    • public String() ,创建一个空白字符数组
    • public String(char[] array) ,根据字符数组的类容,创建字符串
    • public String(byte[] array) ,根据字节数组的类容,创建字符串
      • 一种直接创造
        • String str = “Hello”

    5.字符串常量池

    • 字符串常量池在堆当中,所有的直接创造的字符串的地址都在字符串常量池中
    • 倘若直接创造的字符串有相同的,那么它们指向的堆地址都是一样的【字符串常量池中】
    • 但是用构造方法创造出来的,是通过new出来的,所以它会直接在堆中开辟一块新空间,不管有没有相同字符串
    • 字符串生成的原理都是通过字节数组转换实现的

6.‘==’对于引用类型来说是地址的比较【String】[不是比较类容]

7.Object可以用来比较类容

  • public boolean equals(Object boj);这里是方法原型
    String str1=“abc”;
    System.out.println(“abc”.equals(str1));打印true
  • public boolean equalsIgnoreCase(String str);这个原型可以不区分大小写进行比较,使用和上面一样

8.4个常用获取信息方法

  • public int lenth();获取长度
  • public String concat(String str);拼接返回一个新的字符串
  • public char charAt(int index);获取指定索引位置的单个字符(从0开始)
  • public int indexOf(String str): 查找参数字符串出现的首次位置,没有就返回一

9.截取字符串

  • public String substring(int index);截取从index位置一直到尾
  • public String substring(int begin,int end);左闭又开【begin,end),
  • 注意,原本的字符窜还是没有改变,都只是创造了新的字符串。

10.字符串的转换

  • public char[] toCharArray();将当前字符串拆分为字符数组作为返回值
  • public byte[] getBytes();获取当前字符串的底层字节数组
  • public String replace(CharSequence oldString,CharSequence newString);将老的的字符串替换成新的

11.字符串的切割

  • public String[] split(String regex);
  • 注意事项,不能直接以“.”进行切割,因为.很特殊,必须是“//.”进行

十.static

1.用static修饰变量,那么这个变量属于类,不属于对象,所有这个类的对象都只享有同一份数据

2.用static修饰方法,可以不创建对象,直接类名称.方法名()进行调用

3.同一类中static修饰的方法调用,可以省略类名称调用[方法名();就跟平时写的一样],但其原理还是会被处理为写了类名称的

4.静态方法不能访问成员,因为先有静态后又成员,而且静态中不能用this,因为静态没有对象,更没有所谓的当前对象

5.static存在于方法区中的一个特殊区域,叫做静态区,使用static1修饰的东西于对象无关

6.静态代码块,直接构造一个方法,static{},这样的方法在被第一次创建对象时执行,之后永不执行

十一.Arrars

  • java.util.Arrays下面的类
  • 里面有很多关于数组的静态的方法,使用直接Array.方法名()调用
  • -public static String toString(s数组):将数组(无论什么数组)变为字符串,格式为【元素1,元素2,元素3,。。。。】
    • public static void sort(数组):将数组升序排列,
      排序:数字直接比大小
      字母按照默认升序
      自定义,需要接口

十二.Math

  • java.long.Math下面的类
  • 里面有很多关于数学的静态方法,使用Math.方法名()调用
    • -public static double abs(double num);获取绝对值
    • -public static double ceil(double num);向上取整
    • -public static double floor(double num);向下取整
    • -public static long round(double num);四舍五入
上一篇:java-继承之后
下一篇:java-基础语言知识

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月22日 05时02分47秒