Java 重点总结

Java  重点总结

封装性: 设置属性是private ; 对属性设置get、set方法,实现封装; 好处:保护属性 ,规范数据的内容

继承性:父子类   extends 

好处:父类中包含的非私有的属性和方法,子类直接可以继承使用,减少了程序的代码,提供了程序的效率 (如果父类中有一个方法,子类可以覆盖它,该方式java中叫重写)

Java是单一继承 ,多实现(接口)

多态性:重载 和 重写 都是 java多态性 的典型体现

 

父类引用指向子类对象  (向上转型)

Dog   d=New  Dog();  //标准写法

Chongwu  p = new Dog(); //多态性写法

ArrayList<String>   list=New  ArrayList<String>();  //标准写法

List<String >    list1 = new  ArrayList<String>();  //多态性写法

List<String >    list1 = new  LinkedList<String>();  //多态性写法

多态性(向下转型)

   如果需要调用子类的特有方法,我们就需要使用多态的向下转型了 ,向下转型之前 ,需要先使用关键字instanceOf判断 是不是该子类类型  ,如果是,再强制类型转换 ,如果不是 ,则不能转换

Chongwu类是父类 ,可能具有  吃饭,睡觉,玩耍

Dog 类中包含了一个careHome的方法 ,现在想用p对象,调用careHome方法,不能实现的 Cat 类  包含一个  zhuaMouse的方法,

Chongwu  p = new Dog();

If(p  instanceOf   Dog){

            Dog  d1=(Dog)p;

            d 1.careHome();

}

//向下转型时必须判断对象的类型 ,

杜绝: 不能让一个本来是dog的对象 ,向下转型成cat 或者其他对象 ,

dog对象向下转型只能转回到dog对象本身。

构造函数   构造器:简便对象初始化的一种方式

  1. 类中不写构造函数  , java会在类编译阶段默认做一个无参数构造器
  2. 类中如果写一个构造器, java就不会再为它默认增加无参数构造器了
  3. 写一个类时, 通常加个构造器 ,一个是无参数构造器 ,另一个是自定义的构造器
  4. 构造函数是典型的重载形式   (重载性:一个类中,实现了方法的多样性)
  5. 构造函数中 this  和super的用法

This.age = age;       //this指代类的当前对象

Super  指代的是父类中的某些属性或方法

This(name,age); 或者 super(name,age ) 这两种方法要写在构造函数的第一行 ,表示

This(name,age)  调用当前类的某个构造函数

super(name,age )调用父类的某个构造函数

重载性   和  重写性

重载

  1. 重载性发生在一个类中 ,体现一个类中方法的多样性 
  2. 方法名相同 ,参数不同(类型 ,顺序  ,个数 )
  3. 重载性 并不关心 方法的 访问修饰符和返回值类型 

重写

  1. 重写发生在具有继承关系的父子类中  ,是父子类中方法多样性的体现
  2. 要求与父类中方法名,参数(类型 ,顺序  ,个数 )相同
  3. 访问修饰符和返回值类型也相同 ,或者访问修饰符不能严于父类 ,返回值类型不能大于父类
  4. 当子类调用同名方法时, 会自动调用子类特有的方法体,而不会再调用父类的那个同名方法了

抽象和常量

 Abstract   常用于修饰类 和方法

抽象类 :抽象类是一个模板 ,不能实例化,作用:抽取共性

抽象方法:抽象出所有子类共有的方法 ,但是并不实现,交给继承的那个子类来实现

属性 和 构造函数 不能使用abstract修饰

抽象类中既包含抽象方法,也可以包含实现了的方法 ,子类如果继承抽象类 ,必须重写抽象类中所有的抽象方法 , (如果子类不重写所有抽象方法,那么子类也要定义成抽象类)

常量 final   可以修饰类  ,属性  ,方法 ,对象  ,他与abstract是相反的,对比存在的

修饰类  , 最终类 ,不会再有子类

修饰属性 ,常量  ,值一旦定义后 ,在程序运行阶段不会被改变

修饰方法, 最终方法 ,特点不能被子类所重写

修饰对象 ,最终对象,该对象不能再接受新的指向

Final User   u1  = new User(“zhangsan”,”stuo1”);

User   u2  = new User(“zhangsanfeng”,”stuo2”);

U1=u2;  //error   ,常量问题

U1.setName(“张三”); //没有错误 ,虽然对象的指向不能变 ,但是对象中的属性值是可以改变的 。

 

接口

接口是特殊的类 ,为了类的多继承而发明的 , 可以间接的实现java的多继承

接口是一个规范 ,例子  :瓶盖   usb接口   打印机(墨盒 , 纸张)

接口作用:表示具有什么功能的类

Class  FangDaoMen extends Men  implements Suo , menling

  1. Public    interface   接口名 ,public是默认关键字,不写也是public
  2. 接口中可以定义定义变量(常量),方法(抽象方法)

Int  pi=3.14;    //编译时 会在前面默认加入   

public static final int pi=3.14;

    接口中方法只声明,而不实现 ,交给实现了该接口的那个具体类去重写接口中的方法。

Void Fly();   //编译时 会在前面默认加入  public abstract void fly();

    接口不能实例化接口 可以多继承 接口 

Interface  A  extends  B,C,D ( BCD都是接口)

    接口是团队开发最经常用到的组件  (分层开发)

 

异常处理

作用  :捕获程序中事先判断好的可能出现的错误 ,当捕获到该错误时,程序并不会非法终止,而是抛出该错误信息 , 进入 catch  ,最终进入finally ,程序正常终止 。

Try

Catch

Finally

Java.lang.Exception ;--所有异常的父类  

编译异常 : 文件找不到异常   ,遇到该异常时 ,需要手动添加trycatch 来捕获该异常 或者在方法上声明throws Exception ,不处理异常 ,只声明有异常存在,交给下一个调用我的方法去捕获  

运行异常 :  空指针异常   ,数组下标越界 , 类型转换异常  ,参数异常  ,除数非0异常

Throws  Exception  //声明有异常存在,交给下一个调用我的方法去捕获  

Throw  new  Exception(“这是自定义的异常哦”);//表示在代码的某处 抛出一个自定义的新异常

 

基本数据类型    引用数据类型    包装类 

8个 基本数据类型 

Byte    1字节    -128  ~127

Short   2字节   

Int     4字节   21亿

Long    8 字节   数字长度在19位 的整数   ,具有正负值 

Float   4字节

Double   8字节

Boolean   TRUE  false

Char     使用单引号定义的单字节变量

 

引用数据类型

    String

    数组和集合

    对象

包装类型

把8个基本数据类型转换为引用类型  ,就是其包装类 ,作用:提供一些常用方法,方便调用 ,或者方便数据类型之间的转换

Int  -- Integer

Char  -- Character

Boolean  -- Boolean

Double    -- Double

 

自动装箱

List<Object> list1 = new ArrayList<Object>();

List1.add( 11 ); 

List1.add( ‘ 男’ );//   11 和  ‘男’本身都是基本数据类型,这里首先将其升级为Integer和Character类型  ,再装载到list1里

自动拆箱

Integer  I = new  Integer( “123” );

Int newi = i.intValue();  //自动拆箱是将对象转换成基本数据类型

 

数组

指明数组的数据类型  ,再指明 数组的容量

Int【】 成绩={1,2,3,4,5}  ; 容量是5

另一种写法

Int【】 成绩2= new  int[]{1,2,3,4,5} ;

Java.util.Arrays  数组的工具类 

Arrays.sort()  ; //升序排列  ,只对数值和英文字符有效 ,对汉字无效

如果想实现数组的降序排列  ,需要先sort(),然后再从后先前输出

求最大,最小值 ,都是sort()后,访问数组的头和尾实现

数组的默认值   int数组  默认值是0 ,String数组默认值是null

二维数组

Int [] [] qipan  = new int [15][15];

Qipan[5][7]=”*”;

 

字符串

String 定义完毕后 ,内容是不可变化的 。虽然我们看到内容变化了 , 相当于重新创建一个新的String对象,再将这个对象指向当前变量,对于频繁变化的字符串 ,我们使用StringBuffer对象代替它 

String   == 比较内存地址    equals()比较具体内容 (常用的)

“张三”.equals( name )    //这么书写  ,避免nullpointException异常

 Name.equals(“张三”) 

EqualsIgnoreCase()

toLowwerCase() 

toUpperCase()

trim()  -- 展示时,不展示字符串左右空格 ,但是实际字符串内容并不改变

split()

indexOf( String s)

lastIndexOf( String s)

substring(int i);

substring ( int I  ,int j);

charAt(int  I ) ;

StringBuffer

具有拼接功能的字符串 ,通常拼接sql语句时使用

Append( )  再后面追加内容

Insert( )   再中间最近内容

toString()   将StringBuffer对象转换为字符串对象

 

集合

Collection  集合的总接口

List    Set   Map  接口

List 接口  (可重复的  有序的)

  1. ArrayList   连续的  ,可以重复的  ,对查询比较方便
  2. LinkedList  链表   , 可以重复   , 对修改和删除更方便
  3. Stack      堆栈   ,后进先出 
  4. Queue     队列   ,先进先出

Set 接口 (无序的  不可重复的)

1.HashSet   ,无序的  不可重复的

2.TreeSet   ,特殊的有序性   , 依然不可重复

 

Map (键值对的形式 存放数据   ,key 是不可重复   ,value可重复的)

  1. HashMap   key是无序的
  2. TreeMap  key可以实现特殊的有序性 ,

遍历map可以使用迭代器  

还可以使用  for循环实现

   for (Map.Entry<Integer, String> m : map.entrySet()) {

        System.out.println(m.getKey()+"||"+m.getValue());

      }

 

New  HashMap < String  , List<String>>();

{  “沈阳市”  ,{“浑南区”,“大东区”,“铁西区”} }

集合工具类   Collections  (api 方法  ,操作集合更方便)

数组工具类   Arrays 

 

泛型    -----  具体集合要装载哪种类型 

<   >   ,指定了某个类型的集合 ,就不能再装载其他数据类型的数据 ,否则会抛出参数类型不匹配异常  

 

 jdbc

 Class.forName();//加载某个驱动

Java的反射   forName( ) 通过一个包名.路径名.类名 ,找到该类,并且实例化该类,做一个对象出来  。

    创建链接  (url ,username ,password )

    通过链接  再创建数据库操作对象 statement  或者preparedStatement

 

Sql注入攻击:

Select * from user where name=’hh’ or 1=1 And password =’ ss’ or  1=1 ;

Ligaopeng

123456

Hh’ or 1=1

Ss’ or 1=1

为了解决sql注入攻击问题  ,jdbc提供了 preparedStatement对象 ,再对象创建时,就预编译一条sql语句 , 接下来 使用  pstat.setObject() 拼接?对应的参数 ,最后用ResultSet接受数据库返回的结果集 ,进行迭代器的迭代操作

Class.forName("fdfdsfsfd");

                   Connection con = DriverManager.getConnection("", "", "");

                   PreparedStatement pstat = con.prepareStatement("select * from user where username=? and password=?");

                   pstat.setObject(1, "ligaopeng");

                   pstat.setObject(2, "123456");  

                   ResultSet rs = pstat.executeQuery();

 

Jdbc中的事务操作 

Jdbc默认是自动提交事务 ,可以使用con.setAutoCommit(false);将自动提交事务设置为false。接下来实现多个sql语句的数据库操作后 , 最后在使用con.commit()方法一次性提交所有sql操作  ,手动提交事务就结束了,jdbc 又变回自动提交事务方式

Jdbc工具类  BaseDao.java

该工具类通常 包含以下方法

  1. 获得con对象的方法
  2. 关闭各个对象 ,(con  stat  rs)方法
  3. 公用的增删改方法
  4. 公用的查询方法

java的输入输出流  

输入流   :   文件  输入到内存中的过程 

输出流  :    内存中的数据  输出的  文件的过程 

File 类  实例化 具体的某个文件夹 或 文件的 

字节类型的  io 流  (文字  ,图片  ,视频  ,音频 )

    文本

FileInputStream (”c://新建文本文件.txt”)    FileOutputStream(”d://新建文本文件.txt”)

    图片,音频 ,视频

DataInputStream(”c://image01.jpg”)     DataOutputStream  (”d://image02.jpg”)

字符类型的  io 流  (纯文字)

    FileReader    FileWriter

    BufferedReader    BufferWriter(  大文本  )

 

常用的类

Math    数学运算类    java.lang.Math  

Calendar   日历类     

SimpleDateFormat    格式化日期类型 

NumberFormat     格式化数组类型 

BigInteger    (比long类型还大的整形数值  )

BigDecimal   (针对超大整数和超大浮点数的运算类  )

System  类   (java的lang包 并不需要手动import  ,系统自带lang包下的所有类 ,System,Math类)

Object 类  (toString() ,hashcode() , 所有类都具有的9个共性方法 )

Class类  (getClass()   getName()  getMethods()   得到属性() forname())

 

分层思想 (三层架构)

  1. 展示层 ( html  app ,    mvc 模式  )
  2. 业务逻辑层(service层)
  3. 数据访问层 (dao 模式 )

分布式开发概述

前端  (页面展示  ,js效果)     

后端 (业务逻辑处理)  两个项目通过接口访问前后台的方法 ,输入某些参数,得到具体的返回值,展示在页面

前端服务器  ngix

后端服务器  tomcat

数据库分离  主数据库 做增删改   从数据库 查询  , 主数据库通过数据库复制技术将变化及时更新到从数据库上 

分布部署  :分散服务器压力  ,降低宕机风险  ,模块化的部署  ,目的解决高并发访问的问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值