
本文共 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);四舍五入
发表评论
最新留言
关于作者
