A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周杰11 初级黑马   /  2017-12-22 08:17  /  828 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2017-12-22 15:49 编辑

就业班技术点总结



***********************day01~~day03*************************
***继承:多个类有共同的成员变量和成员方法
    ,抽取到另外一个类中(父类),
    在让多个类去继承这个父类,我们的多个类
    就可以获得父类的成员(变量和方法),
  关键字:extends
  格式:权限修饰符  class 子类 extends 父类 {}
java语言只支持单一继承,只支持一个继承
java 支持多层继承一个儿子可以有一个亲爹和一个亲爷爷
  ***子类只能继承父类的非私有成员
   就近原则:如果有局部变量就使用局部变量
     如果没有局部变量有子类的成员变量就使用子类成员变量
   子类中成员变量名字不一样,自己去找父类的成员变量
   super:可以获取父类的成员变量和成员方法,用法和this是相同的
例子:
public class Test {
  public static void main(String[] args) {
    Kid kid = new Kid();
    kid.show();
   }
  }
class Dad {
  String name = "王健林";
}
class Kid extends Dad {
  String name = "王思聪";
   public void show() {
    String name = "王五葱";
    System.out.println(super.name);// super是找到父类的变量
    System.out.println(this.name);// 找到本类的成员变量,如果本类没有,就会指到父类中的成员变量***this只能指到成员变量***
    System.out.println(name);// 就近原则,找到局部变量(方法中的变量)
   }
}


***方法重写:在子父类中,子类的方法和父累的方法完全一样,子类重写了父累的=父类的方法
,重写过后,使用子类对象调用就是子类的方法
没有重写就到调父类,重写了就调用子类重写的方法

***父类私有的成员方法不能重写*** (*子类方法权限必须大于等于父类方法权限*)
区别:位置不同:
  重载:同一个类中
  重写:存在继承关系
  重载:方法名相同,参数列表不同
  重写:抽象父类的抽象方法需要在子类中重写
  
  
  
  
方法的重写场景:
**父类不能满足子类的需要时就需要重写
注解:@Override

在有子父类的继承关系中





final关键字
*final所修饰的类不能被继承,没有子类   ***final class
*final所修饰的方法不能被子类重写   ***权限修饰符后面
*final所修饰的变量不能被修改是常量,一般常量名所有字母大写***权限修饰符后面
  *字面值常量:1,2,3,...
  *自定义常量:被final修饰的常量
  
abstract:关键字,用于修饰方法和类
*抽象方法:不同类的方法是相似的,但是具体内容不太一样,所以我们只能抽取他的声明,没有具体方法体的方法
*抽象类:有抽象方法的类必须是抽象类
注意:抽象方法的修饰符只能是public和protected  如:public abstract void ect();
  *一个子类继承了一个抽象类只有两个选择
   *1,重写抽象父类的所有抽象方法 //重写时不需要再加abstract 如:
                 @override //注解
                 public void ect(){
                  
                 }
   *2,把子类也变成abstract(抽象)类,在class前加上abstract关键字

   
   
***//static修饰的子类方法不算重写  
***接口***:接口是比抽象类更加抽象的   "类"
一个类可以实现多个接口 如: interface 接口名{}   
        class 类名 implements 接口名1,接口名2{}
接口里只有常量或者抽象方法,实现某一接口的类必须重写接口里的方法(抽象)


  


多态成员特点:
   成员变量:编译时看左边,运行时看左边
   成员方法:编译时看左边,运行时看右边
   静态方法:编译时看左边,运行时看左边
   如:
   
   
   
基本数据类型:
自动转化(小到大): byte short char---int ---long---float---double
强制转化(大到小)
引用数据类型:
自动转换*向上转型(子到父)
强制转换*向下转型(父到子) 父类型 变量名=new 子类型();
         子类型 变量名1=(子类型)变量名;


多态优缺点;
*优点:可以提高可维护性,提高代码的可扩展性
*缺点;无法直接访问子类里面特有的成员


扩展  *instanceof*
格式:对象的变量名 instanceof 类名   
解释:boolan类型,是该类型返回true,否则返回false




**************************Day04**************************
包的特点:
  可以多层
  不同包下的文件名可以重复
  包的声明必须是第一行代码
不同包之间的互相访问:使用类的全名:格式:包名.类名
      import 包名.类名
      注意:"*"(通配符)代表导入了这个包下的所有类,并没有导入子包下的类
      
修饰符:
  public :整个项目可见
  (default)什么也不写:同一个包下都可以访问
  private:只有本类中可以访问
  protected:本类及其子类(可以为不同包下)中可以访问
  
  
***成员内部类的修饰符
可以使用static修饰成员内部类,不用在创建外部类对象了。


***局部内部类的作用域和局部变量一样,出了方法就找不到了
***匿名内部类
格式:new 类/接口(){};
原理:

应用场景:作为参数进行传递

***方法里的返回值 可以是基本数据类型也可以引用数据类型***


*******************************day05******************************
获取字节码对象的方式:
对象名.getClass();
类名.class;
Class.forName("类的全名");*推荐使用*
一个类只有一个字节码对象。

***equals方法
//重写equals方法可以比较属性值等
//不重写则是Object类下的“==”,比较得是地址值
Person p1=new Person("zhangsan",15);
Person p2=new Person("zhangsan",15);
System.out.println(p1.equals(p2));//true


System类
不能被实例化(创建对象),但是不是抽象类,而是因为它的private了构造方法




System.currentTimeMillis();//当前系统时间//从1970-1-1 0:0:0 开始;
System.exit(0);//0代表正常退出,一般写0
Data类:表示特定瞬间,精确到毫秒
构造方法:Date();//当前系统时间
     Date(long date);//可以改变时间
Date常用方法
毫秒值--->Date
  设置
  返回值是void,参数long
   void setTime(long date){}
Date--->毫秒值
  返回值long,无参
  long getTime(){}
  
  
  tolocarString
  
SimpleDateFormat
格式化:formeat(Date date)
解析:parse(String str)//解析的模式必须和指定模式一样,否则会报错
例子:
public class Test {
public static void main(String[] args) throws ParseException {
  //模式
  SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd, HH时mm分ss秒");
  //当前日期
   Date date=new Date();
   //吧当前日期用模式输出
   String string=simpleDateFormat.format(date);
   System.out.println(string);//2017年12月19
   //解析
   //把simpleDateFormat的parse()方法加载模式字符串
   //并把赋值给Date类型的变量然后打印,toLocaleString()方法是以前格式时间,目前已过时,但还能用
  Date date2= simpleDateFormat.parse(string);
  System.out.println(date2.toLocaleString());//2017-12-19 0:00:00
}
}

Calendar :  Calendar s=Calendar.getInstance();//创建对象(比较特殊)
提供一些操作年月日的方法
如:
public class CalendarDemo {
public static void main(String[] args) {
  Calendar calendar=Calendar.getInstance();//创建对象
  //设置日期
//  calendar.set(Calendar.YEAR,2055);
  //添加
  calendar.add(Calendar.MARCH, -5);
  //获取当前日期
  int year=calendar.get(Calendar.YEAR);
  int march=calendar.get(Calendar.MARCH)+1;//相差一天,得加上1
  int day=calendar.get(Calendar.DAY_OF_MONTH);
  System.out.println(year+"年"+march+"月"+day+"日");
//  System.out.println(year+"年"+march+"月"+day+"日");
}
}

intVaule()//自动拆箱
new Integ(10);//自动装箱
/*
* 练习判断字符串中是否包含元音
*/
public class Test {
public static void main(String[] args) {
boolean b= chick("pAZZa");
System.out.println(b);
}
private static boolean chick(String string){
  //正则表达式用法
  return string.matches("[url=file://\\w{2}[aeiouAEIOU]\\w{1]\\w{2}[aeiouAEIOU]\\w{1[/url]}");
}
}
******************************day06****************************
集合体系结构
由于不同的数据结构,所以java 为我们提供了不同的集合
但是不同的集合他们的功能是相似的

*** 不能创建对象,要想用就只能创建子类对象如:Collenction c=new ArrayList();
Collection接口
  isEmpry()//判断是否为空
  add()//添加元素
  clear();//清空集合
  contains(Object o);//是否包含指定元素
  Object objs= ToArray();//转换为数组
  

  List接口
   ArrayList类
   LinkedList类
   
   
   Iterator迭代器
    Iterator i=arr.iterator();
    inerator:next()方法获取集合元素,注意:超过了就报错。
     **一般搭配hasNext()方法使用,hasNext()方法是判断集合是否有下一个元素,有就返回true,没有就返回false
如:
public class IteratorDemo {
  public static void main(String[] args) {
   //创建Collection集合对象
   Collection arrayList=new ArrayList();
   //向集合里添加元素
   arrayList.add("sds");
   arrayList.add("wws");
   arrayList.add("ws");
   arrayList.add("sws");
   //创建迭代器对象
   Iterator iterator=arrayList.iterator();
   //使用while循环,判断是否还有元素,
   while (true) {
    if(iterator.hasNext()){
     //输出元素
     System.out.println(iterator.next());
    }
   }
  }
}

并发异常:迭代器是依赖于集合的,当迭代器发现与集合不一样时就会发生并发异常,Iterator修改会与集合同步
**注意:用迭代器遍历是不能修改集合(集合长度如:增加元素,删除元素,清空集合),否则会并发异常
泛型的好处:避免了类型转换问题,可以减少黄色警告,可以减少代码的书写
什么时候使用:API,当我们看到<E>是就可以使用泛型  




增强for  ***forEach
格式:for(元素类型 变量名:数组或者集合对象){
可以直接使用变量;
}
//在增强for循环中不能修改集合,否则会出现并发修改异常,因为曾强for底层是迭代,使用会出现并发修改异常

链表:增加快,查询慢。
数组:增加慢,查询快;



List:有序的
有整数索引
允许重复
List特有功能:
***注意索引,不要越界***
add(index,values)//增加时在指定索引处增加,如果指定索引处有元素,原来的元素会向后移动一个索引位置,
remove,()//吧删除指定元素返回
set(,)//将指定索引处的元素修改,并且返回修改前的元素
get(,)
List常用子类 ***一般使用ArrayList
ArrayList
  增加慢,查询快
LinkedList
  增加快,查询慢
  方法:
  void addFirst(E e)//将元素添加到索引为0的位置
  void add(E e)//将元素添加到索引为size()-1
  E getFirst()//获取索引为0的元素
  E getLast()//获取索引为size()-1的元素
  E removeFirst()//删除索引为0 的元素,并返回删除的元素
  E removeLast()//删除第一个元素,并返回删除的元素
  
  
  





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马