不做if判断也是可以的
不做if判断也是可以的
类:具有共同特性的群体(如:人)
对象:一个具体的可以使用的实物(如:一个叫王宝强的人)
首先需要产生类之后才能操作对象;类中定义好的对象都可以操作,类中没有定义的对象就一定不能操作。
类的组成:方法(操作的行为)、属性(变量,描述每一个对象的具体特点)
public class Person{ private int age; }
内存空间:
1、堆内存空间:真正的数据,保存的是对象的属性信息
2、栈内存空间:保存堆内存的地址,对象名称
一个栈只能保存一个堆内存地址
对象必须为其开辟内存空间才能执行,否则会报空指针异常
二分查找法(折半查找,采用递归完成):
前提,数组先排序
引用传递本质在于别名,放在栈内存中,一个堆内存空间
当两个对象引用同一内存地址时,无论任何一方属性发生改变,另一方的属性也会同时发生改变
垃圾空间:没有任何栈内存指向的堆内存空间,将不定期的GC回收。
如何使内部数据外部不可见,使用private实封装
类的设计原则:必须使用封装,如果需要对封装的对象进行操作,则需要对封装对象提供getter和setter方法
private实现封装的最大特征是只允许本类访问而不允外部类访问。
区别变量和方法的最简单方法是看有没有()
属性是在对象开辟堆内存空间的时候生成的
构造方法是在使用关键字new的时候同时调用的(只调用一次)
普通方法是在对象已经实例化完成了再调用的(可调用多次)
定义一个有参构造,则默认的无参构造将不会在编译时自动生成
构造方法的调用和对象内存分配几乎是同步完成的,构造方法可以对属性进行初始化处理
通过构造方法设置内容实际上就可以避免重复的setter操作
匿名对象:new Person("张三",30)info();
由于匿名对象不会有任何的栈空间所指向,所以使用一次后将成为垃圾
1.public String[] split(String regex,int limit)将字符串部分拆分,返回的是一个字符串数组。
public String[] split(String regex)将字符串部分拆分。若发现有些n
1.public String substring(int beginIndex)由指定索引处截取到末尾。
public String substring(int beginIndex,int endIndex)截取部分字符串。
链表 二叉树--数据结构的基本功
数据结构就是引用传递和递归
数组定长的线性结构的特点,使得如果内容过多或过少都会产生内存的浪费。
采用火车的车厢的问题,最好的做法就是使用一个不固定长度的数组,有多少数据就保存多少数据。类似于火车车厢。
如果想去定义火车车厢,不能只保留数据,还需要一个位置指向下一个节点。
取出的方式利用递归的方式取出。递归的要有一个结束条件
java中转义用"\\"两条斜线,而js中是一条斜线
类的内存:
关键字new一定是开辟内存空间。
堆内存
栈内存
如果没有封装: 业务逻辑出错
让用户不能直接操作类的敏感内容
如何让内部操作让外部不可见!!!
private封装:只允许本类使用,不允许其他类使用。
private
很少在方法用private修饰
private后,属性安全了。 外部不能访问了
setter方法 用来设置private的属性
getter方法 用来得到private的属性
不管用不用,都要有setter,getter
public void set***(数据类型 变量){
。。。;
}
类的设计原则:
设计类的时候,类中的所有属性必须使用private封装。
而是用private封装的属性如果需要被外部使用,那就按照格式定义相应的setter和getter
构造方法与类名称相同,且没有注明返回值类型
构造方法允许重载,重载时只需要考虑参数的类型和个数
new 类名称();
类名称(); 就是构造方法
默认的构造方法(类中没有定义构造方法时)是:无参的,什么都不做的构造方法。
类构成:属性(开辟控件时有的),普通方法,构造方法(实例化对象时)。
构造方法:构造方法为类的属性初始化处理。
setter函数不仅能设置属性,还可以修改属性值
构造方法重载,注意结构顺序。。。。如参数个数升序/降序
类定义是一般遵循:
第一部分写属性,
第二部分写构造方法
第三部分写普通方法
匿名对象:::匿名对象没有栈空间
new 类对象(参数1 ,参数2,...)