java基础

*面向过程面向对象举实例说明?

面向过程:是分析出解决问题所需要的步骤,然后用函数一步步实现,使用的时候依次调用就可以了

面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤中的行为

例如:五子棋,面向过程的设计思路是:(1)、开始游戏;(2)、黑子先行;(3)、绘制画面;(4)、判断输赢;(5)、白子再行;(6)、绘制画面;(7)、判断输赢;(8)、返回步骤2,9,输出最后结果。将这些步骤细化为函数来实现,调用实现

面向对象的设计过程:(1)、将五子棋分黑白双方,且这两方的行为是一模一样;(2)棋盘系统,复制绘制画面;(3)规则系统,负责判定输赢,违规等规则

即:将五子棋整个划分为三大类:玩家、棋盘系统、规则。玩家输入告知棋盘系统,棋盘系统绘制,并利用规则系统对棋盘进行判定

2018.9.4

一、计算机处理哪些信息?

    图片、文字、音频、视频

二、处理字符是重点,java中使用String、StringBuffer、StringBuilder

1、String的应用:

(1)类型转换:

    String=>其他:构造方法:*byte[];char[];valueOf()

    其他=>String:getBytes():String=>byte

(2)判断:

(3)处理:index();match();

(4)格式化:format()日期数值,格式化

2、链式编程方法:append()、insert()、delete()、deleteCharAt()、replace()、reverse()

总结:String简单字符处理

      Stringbuilder和StringBuffere处理大数据以及多线程并发问题

      Stringbuilder轻量级,速度快

String确定对象后,不能在进行更改。用new实例创建的存储于堆中;除了new实例化后的对象外,其他的均存放在常量池中(""创建的,称为字符串常量,在字符串常量池是共享的)(常量池中回收周期较长,即长时间不会进行GC操作,故占用内存交大)

*除了基本数据类型外,其他的存储在堆中

For Example:

1.String str1=”first”;

jvm在运行时先查找常量池中是否有该字符串,如果有则直接返回该字符串的引用给first(实现了字符串的共享) ;否则先在常量池中创建该字符串并返回引用。

此时只会在常量池中创建String对象,不会在堆中创建。

2.String str2=new String(“second”);

该代码生成了两个String对象。因为使用了“”会现在常量池中查找是否存在second对象,没有则创建

否则不创建;在常量池创建完成后,由于使用了new,jvm会在堆中创建内容相同的String对象,并将引用返回给str2.

3.String str3=”what”; String str4=str3+”a nice day”;

运行时,+ 相当于new,所以堆中会有“what a nice day”对象;常量池中会有”what” “a nice day”两个对象,而不会有”what a nice day”对象。

4.三者在执行速度方面的比较:StringBuilder>StringBuffer>String

StringBuilder和StringBuffer:底层用数组实现添加(默认大小为16,在16基础上扩大),扩大数组容量,并复制数组(引用数据类型)。调用父类AbstractStringBuilder的扩充方法,父类底层是通过System.arraycopy()实现的

StringBuilder:线程非安全的字符串操作,由于他的字符串添加没有加同步操作,涉及到数组扩容,容易产生脏数据,破坏数据正确性。底层结构和StringBuffer:实现基本一样,只是没有做同步处理。

--->StringBuffer和StringBuillder都继承抽象类AbstractStringBuilder,该抽象类实现了字符串操作的方法。

--->StringBuffer和StringBuillder的实现,运用了模板方法的设计模式,将核心数据操作放在父类方法里,子类实现自己的独有特色的功能,涉及核心操作,调用父类方法。

------------java.lang包是元基础包----------------

三、java修饰符:public、protected、default、private

    1、public::本包类子类及其他包子类及非子类均可以

    2、protected:本类、本包及其子类

    3、default:本类及本包

    4、private:本类内可以访问

四、面向对象三大特性:封装、继承(代码复用)和多态,封装成类发现了类与类之间的关系,产生继承,继承后又逐渐发现多态

类:是数据与功能的封装,数据就是成员变量,功能就是类方法或对象方法

1、封装:

为什么要封装(抽象类封装):隐藏内部实现,对外保留公共访问接口;(避免外部对该类的内容进行操作)

怎么实现封装:(对属性以及方法的封装):1、私有化属性;2、对外提供公共的set、get方法

封装的好处:将变化隔离;提高安全性

2、继承(为了实现代码复用):

继承的缺点:<1>继承是一种强耦合关系,父类发生改变则子类也必须发生变化

                    <2>继承破坏了封装,父类对子类来说是透明的

(1)能否继承父类构造方法?不可以,仅仅是调用父类的方法。java规定子类继承父类时,父类需要有显示构造方法

(2)父类私有属性可以被继承吗?可以,私有属性可以继承,但是不能直接访问,可以通过父类访问

3、多态:(继承类和实现接口都体现的是多态)同一个行为,不同的表现形式

形成条件:1、父类引用指向子类对象;2、子类重写父类方法;3、接口引用指向实现的方法,调用指定方法

(1)重载(overLoad):方法名相同(参数类型、数量以及位置),针对构造方法和非静态方法

(2)重写(override):返回值,方法名,参数类型数量以及位置均相同

多态的好处:可扩展性好;(不包括构造方法,不包括静态方法,不包括final方法。)

*构造方法可以被重载但不可以被重写,静态方法不能被重载

    非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果;

    静态方法属于类,是不能被重写,故而也不能实现多态(但重写也不会报错)

    Static类型的属性和方法都不可以被子类继承

扩展:

程序绑定:是指一个方法的调用与方法所在类(方法主体关联起来),对java来说,绑定分为静态绑定和动态绑定(也可以说前期绑定和后期绑定)

1、静态绑定:在程序执行前方法已经绑定,此时由编译器或其他链接程序实现,例如:c,针对java简单的可以理解为程序预编译期的绑定;java中的final、static、private和构造方法是前期绑定

2、动态绑定:是指编译器在编译阶段不知道要调用哪个方法,直到运行时根据具体对象的类型进行绑定,若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。(即编译器即使不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体)不同的语言对后期绑定的实现方法有所区别,但我们可以认为:他们都要在对象中安插某些特殊类型的信息

-----------代码存储于方法区,new申请内存空间--------------

五、类的内容:构造方法、属性、方法

1、构造方法:方法名相同(参数类型、数量以及位置不同),无返回值

    作用:1、创建对象;2、初始化属性

2、属性:

    (1)静态(static):方便在没有创建对象的情况下来进行调用(方法/变量)。当前类的对象中可以共享的变量。static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用

    至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

static不能修饰局部变量

    (2)final:可以修饰成员变量和局部变量(final修饰的方法不再在重写)

3、方法:方法声明+方法体,实现代码复用

六、进程:运行的程序

    线程:程序执行流,循序执行流(创建线程三种方法)

   

       *继承 Thread

        *实现 Runnable

        *实现 Callable,有返回值

                          阻塞:

    线程状态:初始化-就绪-------运行-消亡

                          等待

线程CPU调度:抢占式的(还有其他CPU调度方法)

线程之间的通讯:wait(),直到等到别人调用才会被唤醒

                notify(),唤醒线程,随机叫醒等待队列线程

                notifyAll(),唤醒所有线程,线程争抢

线程池:降低资源消耗,减少线程频繁的创建和销毁造成的资源浪费

七、锁

Synchronized:锁住的是对象(成员方法与对象绑定)属性及方法

死锁:循环等待、请求与保持、不可剥夺、互斥条件

判断一个字符串是否都为中文:1、使用getBytes()方法,看编译后的字节个数;                          2、正则表达式

八、数组:同一种数据类型,存储在连续内存,大小和地址一旦确定不可再发生改变

操作:访问(利用下标),排序,查找

特点:插入、删除比较费时

九、集合概谈

十、抽象(abstract):同一属性的抽象出的;可以修饰类和方法

抽象类有没有构造方法?有构造方法,且可以被子类调用

抽象类存在的意义:①不允许被实例化;②就是被继承

1、修饰类:可以被继承,且抽象类不可以被实例化

2、修饰方法:没有方法体;

十一、接口(interface):一些方法特征的集合,常量和抽象方法

JDK1.8添加了什么?

(1)增加了default和static方法,这两个都可以有方法体。Default方法属于实例,static方法属于类(接口);

    Default方法调用:定义一个子类实现该接口,new该类实例,调用即可

    Static方法调用:类.方法名()

(2)接口中可以有属性,默认为public static final修饰,静态方法不会被继承,静态变量会被继承;

(3)实现类可以重写父接口的方法;

(4)接口有functionInterface注解,只能有一个抽象方法;

(5)如果接口只有一个抽象方法自动变成函数式接口

(6)接口中无构造器和初始化块

Note:接口可以当枚举

*接口与接口之间是继承关系

实现一个登录的过程以及思考的过程?(面向过程和面向对象)

Note:用接口定义Dao层的好处,其实是为了不在关心数据的获取,仅仅调用即可。(数据的获取可以来自数据库,也可以来自文件)

“admin”.equals(username)与password.equal(“1234”)这两种写法哪种更好,第一种,因为输入一定不为空,第二种可能传入的为空,需要输入前先判断一下

十二、接口和抽象类的区别?

*那么接口和抽象类如何选择啊?

1、如果要创建不带任何方法定义和成员变量的基类,,那么就应该选择接口;

2、如果知道某个类应该是基类,那么第一个选择的应该是让他成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类,因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有完全被实现的就是抽象类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值