2017年4月3号课堂笔记

2017年4月3号  重度雾霾

内容:log4j,集合框架(ArrayList,LinkedList)

一、log4j

老师代码:

1)log4j.properties:

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.target=System.err

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.conversionPattern=[%-5p] [%d{hh:mm:ss}] %c %l %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=e:/bdqn.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=[%-5p] [%d{hh:mm:ss}] %c %l %m%n

//在console台上和文件里都输出:

log4j.rootLogger=trace,console,file

//console台上输出TestLog4j的所有

//console台上输出UtilTest的warn以上的3组信息

2)测试类TestLog4j:

package cn.log4j.test;

import org.apache.log4j.Logger;

public class TestLog4j {
/**
* log4j错误的级别 由大到小!
* fatal
* error
* warn
* info
* debug
* trace
*
* off:不显示任何信息!
* all:显示有的信息!
*
* 01.将信息显示在console台上
* log4j.appender.console=org.apache.log4j.ConsoleAppender
* ConsoleAppender console=new ConsoleAppender();
*
* 02.显示的格式
* log4j.appender.console.layout=org.apache.log4j.PatternLayout
* PatternLayout layout=new PatternLayout();
*
* 03.自定义显示格式
* conversionPattern=自定义的匹配格式
*
* log4j.rootLogger=级别,变量1,变量2...
*
* 显示在电脑中的某个文件夹 如果不指定路径默认是在项目的根目录下
* log4j.appender.file=org.apache.log4j.FileAppender
* log4j.appender.file.File=e:/bdqn.log
*/
public static void main(String[] args) {

Logger logger = Logger.getLogger(TestLog4j.class);
logger.fatal("fatal msg");
logger.error("error msg");
logger.warn("warn msg");
logger.info("info msg");
logger.debug("debug msg");
logger.trace("trace msg");

}

}

二、为什么需要集合?

三、ArrayList

老师代码:

公用的两个实体类:

1)动物类:

package cn.bdqn.bean;

/**
* 动物类
*/
public abstract class Animal {

private String name; // 姓名
private int health; // 健康值
private int love; // 亲密度

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getHealth() {
return health;
}

public void setHealth(int health) {
this.health = health;
}

public int getLove() {
return love;
}

public void setLove(int love) {
this.love = love;
}

public Animal(String name, int health, int love) {
super();
this.name = name;
this.health = health;
this.love = love;
}

public Animal() {
super();
}

// 自我介绍的方法
public abstract void showInfo();

}

2)狗狗类:

package cn.bdqn.bean;

/*
* 狗狗类
*/
public class Dog extends Animal {
// 品种
private String strain;

// 重写父类的方法
@Override
public void showInfo() {
System.out.println("姓名:" + this.getName());
System.out.println("健康值:" + this.getHealth());
System.out.println("亲密度:" + this.getLove());
System.out.println("品种:" + this.strain);
}

public String getStrain() {
return strain;
}

public void setStrain(String strain) {
this.strain = strain;
}

public Dog(String name, int health, int love, String strain) {
super(name, health, love);
this.strain = strain;
}

public Dog(String name, int health, int love) {
super(name, health, love);
}

public Dog() {

}

}

3) ArrayListTest:

package cn.bdqn.test;

import java.util.ArrayList;
import java.util.List;

import cn.bdqn.bean.Dog;

public class ArrayListTest {

/**
* ArrayList是List接口的实现类!
* 底层默认使用的是Object类型的数组!
* 特点:
* 存储的是一组 不唯一,有序的数据!
* 遍历和随机访问元素的性能高! 因为有下标!
*/
public static void main(String[] args) {
// 创建3个狗狗对象
Dog dog1 = new Dog("小狗1", 50, 100, "小狼狗1");
Dog dog2 = new Dog("小狗2", 50, 100, "小狼狗2");
Dog dog3 = new Dog("小狗3", 50, 100, "小狼狗3");

/** 之前的数组
* Dog[] dogs = new Dog[30];
dogs[0]=dog1;
dogs[1]=dog2;
dogs[2]=dog3;*/

// 使用ArrayList集合来保存3个小狗狗的信息
List dogs = new ArrayList();
// 向集合中增加数据
dogs.add(dog1);
dogs.add(dog2);
dogs.add(0, dog3);
// 输出集合的大小
System.out.println("dogs集合中一共有多少个数据?" + dogs.size());
// 遍历集合中所有的数据 shift +alt +m 提取成方法
forArrays(dogs);
/**
* 从集合中删除指定的对象
* dogs.remove(0); 从指定的位置删除
* dogs.remove(Object obj); 删除指定的对象
*/
dogs.remove(0); // 把下标为0 的对象 删除
System.out.println("0000000000000000000删除之后的数据0000000000000000000");
forArrays(dogs);
// 查询集合中是否包含某个对象
System.out.println("集合中是否包含dog3?" + dogs.contains(dog3));
}

// 遍历集合中所有的数据
public static void forArrays(List dogs) {
for (int i = 0; i < dogs.size(); i++) {
/**
* 因为我们没有指定集合的类型
* 在底层给我们生成的数组是Object类型
* 而我们往集合中增加的数据是Dog类型
* 需不需要转换? 我们需要向下转型
* dogs.get(i) 获取集合中指定下标位置的对象
*/
Dog dog = (Dog) dogs.get(i);
// 调用dog类中的自我介绍的方法
dog.showInfo();
System.out.println("**************************");
}
}

}

四、LinkedList

老师代码:

LinkedListTest:

package cn.bdqn.test;

import java.util.LinkedList;
import java.util.List;

import cn.bdqn.bean.Dog;

public class LinkedListTest {

/**
* LinkedList是List接口的实现类!
* 底层默认使用的是链表式的存储结构!
*
* 特点:
* 存储的是一组 不唯一,有序的数据!
* 在新增和删除数据的时候,效率高!
*/
public static void main(String[] args) {
// 创建3个狗狗对象
Dog dog1 = new Dog("小狗1", 50, 100, "小狼狗1");
Dog dog2 = new Dog("小狗2", 50, 100, "小狼狗2");
Dog dog3 = new Dog("小狗3", 50, 100, "小狼狗3");

// 将三个对象放入 集合中
LinkedList dogs = new LinkedList();
dogs.add(dog1);
dogs.add(dog2);
dogs.addFirst(dog3); // 在集合的第一个位置插入数据
forArrays(dogs);
/**
* 删除 第一个对象
* dogs.remove();默认删除 第一个对象
*/
dogs.removeFirst();
System.out
.println("...........................删除之后...........................");
forArrays(dogs);
// 集合中是否包含某个对象
System.out.println("集合中是否包含dog3?" + dogs.contains(dog3));

}

// 遍历集合中所有的数据
public static void forArrays(List dogs) {
for (int i = 0; i < dogs.size(); i++) {
Dog dog = (Dog) dogs.get(i);
// 调用dog类中的自我介绍的方法
dog.showInfo();
System.out.println("**************************");
}
}

}

五、String和字符串池

1)老师代码:

 StringTest:

package cn.bdqn.test;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

public class StringTest {
/**
*
* 基本数据类型 ==:比较是的值
* 引用数据类型 ==:比较是的内存地址
*/
@Test
public void test01() {
String name1 = "abc";
/**
01.在常量池中寻找有没有"abc" ;
02.没有就创建一个"abc" 开辟空间在常量池中
03.栈中name1 指向 常量池中 "abc"
*/
String name2 = "abc";
/**
01.在常量池 寻找有没有"abc" ;
02.发现有"abc"
03.栈中name2 指向 常量池中 "abc"
*/
System.out.println(name1 == name2); // true
}

@Test
public void test02() {
String name1 = new String("abc");
/**
* 01.先在栈中开辟空间存储name1
* 02.在常量池 寻找有没有"abc"
* 03.发现 没有 就在常量池中创建一个"abc"
* 04.去堆中再创建一个 "abc"
* 05.name1执行了 堆中"abc"
*/
String name2 = new String("abc");
/**
* 01.先在栈中开辟空间存储name2
* 02.在常量池 寻找有没有"abc"
* 03.发现 有 就不在常量池中创建对象
* 04.去堆中创建一个 "abc"
* 05.name2执行了 堆中"abc"
*/
System.out.println(name1.equals(name2)); // true
System.out.println(name1 == name2); // false
}

@Test
public void test03() {
String name1 = "abcd";
String name2 = "abc";
String name3 = name2 + "d";
/**
name2是一个变量! 系统在编译的时候不会把"abc"立即给name2
*/
System.out.println(name1.equals(name3)); // true
System.out.println(name1 == name3);// false
}

@Test
public void test04() {
String name1 = "abcd";
final String name2 = "abc"; // 常量
String name3 = name2 + "d";
/**
name2是一个常量! 系统在编译的时候立即把"abc"给name2
*/
System.out.println(name1 == name3);// true
}

@Test
public void test05() {
String name1 = "abcd";
String name2 = "abc" + "d"; // 常量
System.out.println(name1 == name2);// true
}

@Test
public void test06() {
String name1 = "abcd";
String name2 = new String("abcd");
System.out.println(name1 == name2); // 内存地址不一样
System.out.println(name1.hashCode() == name2.hashCode());// hash值一致
Set set = new HashSet();
set.add(name1);
set.add(name2);
System.out.println(set.size()); // 先判断hash值,之后再看内存地址和内容
/***
* 底层代码
* if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
*/

}

}

2)String底层代码(部分):

六、List接口常用方法和LinkedList的特殊方法

  

七、作业

1、总结笔记(MindManager),看不动视频了就总结笔记或者做题

2、看视频,下次课前看完实体类

3、做题,你懂的

八、考试

2017.04.03
15: 01开始,15:56结束;答题时间:55分钟;检查时间:0分钟;
成绩:82分

有几道题方法没见过,考完去查去学!
中途出去休息两次,听歌无数(隔壁东北口音老师嘶吼的太厉害了ORZ)

九、老师辛苦了!

时间: 2024-12-10 07:58:37

2017年4月3号课堂笔记的相关文章

2017年5月12号课堂笔记

2017年5月12号 星期五 空气质量:轻度污染(昨天的北风转今天的南风) 内容:html表格的基本使用,表格跨行跨列,高级表格,播放音乐,播放视频,网页布局,iframe内联框架: 文本框,密码框,单选按钮,复选框,下拉框  备注:周日晚想起来补上的周五课堂笔记(一带一路今天开会天气好晴朗) 一.html表格的基本使用 模仿老师代码: <!DOCTYPE html><html><head lang="en"> <meta charset=&q

2017年5月29号课堂笔记

2017年5月29号 阴天 空气质量:良 内容:JavaScript基础:输入输出及确认,统计字符出现的次数,系统函数,自定义函数, 自定义函数和事件的连用,四则运算小练习,方法的作用域 JavaScriptBOM对象(下次课堂笔记再补上,一起记录)history,location,open,document 一.输入输出及确认 仿写老师代码: <!DOCTYPE html><html><head lang="en"> <meta charse

2017年5月24号课堂笔记

2017年5月24号 星期三 晴 空气质量:优 内容:定位属性,CSS3动画  备注:5月25日补课堂笔记 一.定位属性  01.定位属性 仿写老师代码: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>定位属性</title> <!-- position:定位属性 属性值: 01.static:默认值

2017年5月5号课堂笔记

2017年5月5号 星期五 沙尘暴转晴 内容:U2 HTML5第一节课 一.01第一个霸气的网页 1.老师代码: <!DOCTYPE html><html><head lang="en"> <!-- html注释 不安全 用户在网页中查看源代码可以看到 w3c : World wide Web Consortium (万维网联盟) 官网: www.w3.org www.chinaw3c.org w3c标准: 01.结构化标准语言 html xh

2017年5月22号课堂笔记

2017年5月22号 星期一 大雨 内容:盒子模型,浮动 备注:5月24日补上 一.盒子模型 01.边框border 仿写老师代码: <!DOCTYPE html> <html><head lang="en"> <meta charset="UTF-8"> <title>边框</title> <style type="text/css"> div{ /* 上 to

2017年6月19号课堂笔记

2017年6月19号 星期一 晴转多云 空气质量:轻度污染~良 内容:表单验证 01表单选择器:02String对象实现表单验证:03登录成功页面: 04验证错误信息的显示:05正则验证年龄:06Html5validaty 备注:老师归来第一节课,大家都很开心,学习的感觉又回来了~ 一.表单选择器 老师代码: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"

2017年6月21号课堂笔记

2017年6月21号 星期三 多云转雷阵雨 空气质量:中度污染~轻度污染 内容: JavaScript 原型式面向对象 01基于Object的对象的方式创建对象:02使用字面量赋值方式创建对象 03构造函数:04原型对象:05原型链 备注:老师休养回来第二节课,希望他手术的伤口尽快愈合,远离伤病痛苦. 一.基于Object的对象的方式创建对象 1.老师代码: <!DOCTYPE html><html><head lang="en"> <meta

2017年07月03号课堂笔记

2017年07月03号 星期一  多云 空气质量:轻度污染~中度污染 内容:MySQL第四节课 in和not in:两个表的内连接:exists和not exsits的使用:all,any和some: 使用子查询的注意事项:sql优化(使用exists 代替 in):group by:两道mysql面试题 一.in和not in 1.in-- 使用in替换 等于(=)的子查询语句!-- in后面的子查询可以返回多条记录! 1)例题1 -- 查询年级编号是1或者2 的 所有学生列表 SELECT

2017年07月05号课堂笔记

2017年07月05号 星期三 多云 空气质量:中度污染 内容:mysql第五节课+MySQL自测考试 表连接查询:内连接,左右外连接,自连接 事务:事务的特性 ACID,demo(模拟 银行转账)开启,回滚,提交,关闭/开启事务自动提交 一.表连接查询 1.概念: 1)内连接 : 通过匹配两个表中公共列,找到 公共的行! 2)左外连接: 以左表为准,右表中没有数据返回null 3)右外连接: 以右表为准,左表中没有数据返回null 4)自连接:  把一个表当成多个表来使用 关键是 使用别名 2