java面向对象基础

java文件与class与class文件的关系:

1,一篇java文件可以书写多个类;

2,一篇java文件只能有一个公共类,公共类的名称必须与java文件名一致。(实际书写中,要做到一篇java文件只有一个类,内部类除外);

3,一篇java文件可以生成多篇class文件,class文件的数量取决于类的数量(1个class文件对应一个类);

4,class文件的名字与它对应的类名保持一致,与java文件名无关(所以JVM中的加载器叫做类加载器,加载的是class文件);


方法重载:在一个类当中,当有多个同名方法的时候,那么只能根据参数列表的不同(个数,类型,顺序)来区分,构造方法就是一个简单的方法重载。

方法重写:一个类继承了父类,对父类方法的重新实现,这个重新实现就是使用相同的方法名,相同的参数列表,相同的返回类型,访问修饰符要大于等于父类。重写后的方法不能抛出更多的异常,


构造方法:用来产生对象,产生对象的步骤:1首先在堆中划分空间,根据类的定义确定空间的大小;

2,在该空间划分属性;

3,对属性进行初始化(如果没有赋初始值,基本数据类型为0,引用数据类型为null);

4,执行我们在构造方法中书写的代码;

如果没有定义构造方法,JVM会自动提供一个默认的公共无参构造;构造方法的语法:public 方法名(形参列表)。1,方法名必须是类名;2,没有返回类型,void都没有;


== 是用被用来表示两个对象变量中的引用是否指向同一个对象,equals()用来比较两个对象在业务上是否相等:equals在根类中,由于不能确定每个子类具体的业务行为,所以只能进行简单的实现,就是比较引用相等,所以子类的实现经常需要重写该方法完成业务比较。


final:修饰变量(常量),修饰方法(不能被重写),修饰类(不能被继承)。

static:修饰属性:1,全局共享一个值,2与对象无关,而是与,类有关,所以static属于类属性,可以直接使用类.的方式直接调用,3常量可以无脑定义成static。

修饰属性的内存特性:1改属性不会存放在对象身上,而是放在数据段中的静态区域中,2static修饰的属性是在类加载的时候直接放入静态去中,所以可以用类名.的方式直接调用,无须产生对象。

修饰属性对应的场景:变量属性必须判断出要有犬类共享唯一值这一特征才能这么使用。

static{}:静态初始化块:类加载的时候自动执行,一个类只会加载一次,在main方法执行之前,可以在加载期做一些加载动作,不会影响运行期的执行性能


继承:子类继承了父类以后,可以自动拥有父类的属性行为,除了父类的构造,但是构造方法参与了继承机制

this和super:this能够访问到1,本类自己定义的所有方法和属性,不受访问修饰符的限制,2,来自父类的修饰符所允许的属性行为。

super:能访问的只是父类修饰符所允许的属性和行为。只有一个情况分开用,当this是重写后的效果,super是重写前的效果


instanceof  用来判断对象是否是某个类的实例,是一个关键字,属于一种关键字,在做向下转型的时候,要习惯于先用instanceof做一次判断,保证运行期不会报错。


类型转换:引用数据类型也能做数据转换,引用数据类型转换只能在具有继承关系的类之间进行,正是因为沿着继承树转换 ,所以才有向上转型和向下转型的概念。

向上转型:绝对成功,父类引用指向子类对象。

向下转型:只有最终效果体现:本类引用指向本类对象。把父类对象交给子类引用,是强制转换。(https://blog.csdn.net/qq_31655965/article/details/54746235)


抽象:父类没有产生对象的必要性了,父类的作用就是给子类提供共有属性和行为,为避免误操作,吧父类设计为抽象类,用abstract修饰,

特点:1不能产生任何对象,只能被继承,2 仍包含类的一切内容,(属性构造行为等)。一个类只要有一个抽象方法,这个类必须是抽象类。子类重写抽象类以后,必须全部重写所有抽象方法,否则子类也必须是一个抽象类,抽象类只能单继承,并且满足is a 关系。


异常:最完整的异常捕获:try-catch-finally

1,必须要有try块儿,try后可以值接catch,也可以只接finally,2catch可以有多个,finally只能有一个。

throws抛出异常:卸载方法申明部分,后面跟的是异常类的类名,跟多个用,隔开,作用就是在编译器警告,本方法有可能会发生异常,应提前处理,否则可能会导致编译不通过

throw写在方法体中,然后后面跟上1个异常对象,当执行到这句话的时候,就会真正的发生一次异常抛出的动作,当throw抛出的异常对象为非运行时异常的时候,必须在方法申明部分添加throws关键字


包装类是对基本数据的封装:相当于基本数据类型只能存放基本数据,包装类还能提供更多的方法和属性。Integer.parseInt(str)


如果要操纵时间:第一选择是DATE类,获取当前的时间这个类是非常地简单,但是要获取指定时间日期的时候比较麻烦。Date类可以和simpledateformat联合使用。第二选择是calender类,这个类获取指定时间比较方便。


String API:1,与char有关,toCharArray,indexOf,lastIndexOf。2,与英文有关;equals,equalsIgnoreCase。3,与字符串内容相关:concat,replace,substring。4,特有常用方法:trim()去掉前后的空格,split()根据正则拆分,matches()验证字符串是否符合正则表达式

StringBUilder,Stringbuilder:这两个类是用来解决String的拼接问题的:执行速度:builder大于buffer,builder线程不安全。append,delete,insert


集合:List,Set,Collection,Map

List:线性,有序,有下标,所有的ListJ集合都具有相同的增删查改方法,

ArrayList:底层实现使用数组。---适合于做大量的查询动作。LinkedList:底层实现使用双向链表。---适合于做大量的添加删除元素(特别是往中间添加删除)。增删查改:add,remove,delete,set.长度:size()

for-each循环:专门为循环遍历所设计的语法,也支持数组.好处---专门针对从头到尾访问一遍设计,所以语法简单,坏处---1、不能有跳跃或回退等功能算法;2、不能在遍历过程中修改或删除元素

Set:不能存放相同的元素且无序,HashSet先调用了HashCode方法,然后用equals方法,由此来判断set的元素是否相同

//探究一下HashSet是如何判断两个对象相同的?
//1、根据上面的三个表示hello的字符串,分析出肯定不是根据引用是否相同;
//2、根据上面的三个表示hello的字符串,分析出肯定调用了equals方法
//3、HashSet不仅仅是根据equals方法,还要根据hashcode方法---重写equals,必须重写hashcode
//4、先调用hashcode方法,如果相等,再调用equals方法

Map:增删查改,put,remove,get,put,其遍历是遍历所有的键或者值,map.keySet,map.values
Collection:现在没怎么用过


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页