Java基础入门(25天) 毕向东


day 01 (3.29)
------------------------
先写注释, 再写代码. (现有思路, 在用语言表达.)
/*
需求: asdasd
思路:
1.
2.
步骤:
1.
2.
*/
------------------------
day 02 (3.29)
------------------------
1. 标识符:由26个英文字母大小写, 数字和'_', '$'组成. 数字不能开头. 不能用关键字.
2. 逻辑运算符: &且, |或, ^异或, !非, &&短路且, ||短路或.
位运算符: <<左移, >>右移, >>>无符号右移, &按位与, |按位或, ^按位异或(xor), ~按位取反.
3. 所有类型与字符串用'+'连接都变成字符串.
4. 一个数异或另一个数两次还得原数.
5. 不引入新变量, 交换两书的值.
a = a + b; b = a - b; a = a - b; // 如果a和b是大数, 可能超过整型的最大范围.
或 a = a ^ b; b = a ^ b; a = a ^ b;
------------------------
day 03 (3.30)
------------------------
------------------------
day 04 (3.30)
------------------------
1.
int[] arr = {1,21,3,4}
System.out.println(arr)
输出: [I@15093f1
意义: [ 表示数组的那个中括号, I 表示Integer. @后面表示内存地址.
这个的意思是: 地址为 15093f1 的指向Int型的引用
------------------------
day 05 (3.30)
------------------------
------------------------
day 06 (3.30)
------------------------
1. javadoc作用于public和protected权限的类、方法等.
2. 一个类默认有一个空参数的构造函数. 这个默认的构造函数的权限和所属类一致.
------------------------
day 07 (3.31)
------------------------
------------------------
day 08 (3.31)
------------------------
------------------------
day 09 (3.31)
------------------------
1. 内部类定义在局部(如定义在方法中)时, 内部类可以访问外部类的成员, 但是不能访问内部类所在局部中的变量, 除非此变量用final修饰.
2. 匿名内部类必须有继承父类或实现接口. 格式: new 父类构造器(形参列表){...}; 或 new 实现接口{...};.
------------------------
day 10 (3.31)
------------------------
1. 源码中使用package指定包的情况下, 编译时需用-d参数指定包路径. (javac -d . Test.java 会在当前路径下生成新的包文件夹并将对应.class文件放在里面; javac Test.java直接将.class文件放在当前路径. )运行时用java pack.PackageDemo命令运行当前路径下的pack文件夹中的PackageDemo.class(即使当前路径位于pack文件夹中, 运行时也要java pack.PackageDemo不能直接java PackageDemo).
2. jar 看help.
------------------------
day 11 (4.1) --> pass
------------------------
------------------------
day 12 (4.1) --> pass
------------------------
------------------------
day 13 (4.1)
------------------------
1. String类型初始化后不能修改, StringBuffer类型的可以.
区别: 
其实很简单,就是一个变量和常量的关系
StringBuffer对象的内容可以修改
而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象

比较
StringBuffer str = new StringBuffer("a");
str.append("bc");

String str2 = "a";
str2 = str2 + "bc";

str引用的一直是同一对象
而str2引用的在两句中是完全不同的对象
来源: >
------------------------
day 14 (4.1)
------------------------
------------------------
day 15 (4.1)
------------------------
------------------------
day 16 (4.1)
------------------------
------------------------
day 17 (4.1)
------------------------
1. for用法.
for(数据类型 变量名 : 被便利的集合(Collection)或者数组)
{
...
}
2. 静态导入.
import static java.util.Arrays.*; // 导入的是Arrays这个类中的所有静态成员. (有重名时还是要指定所属的对象或类. )
------------------------
day 18 (4.2)
------------------------
1. 字节流 和 字符流: stream结尾的都是字节流, reader和writer结尾的都是字符流. 区别是读写是一个按字节读写, 一个按字符.
------------------------
day 19 (4.3)
------------------------
1. Ctrl+c结束 对应ASCII的3, 表示"文本结束".
2. StringBuffer线程同步, StringBuilder线程不同步. 其他一样.
------------------------
day 20 (4.3)
------------------------
1. 读取键盘输入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
读取文件输入
BufferedReader bufr =
new BufferedReader(new FileReader(file));
// 获取键盘输入, 并输出至控制台. 遇over停止.
BufferedReader bufr = new BufferedReader( new InputStreamReader(System.in));

String line = null;

while((line =bufr.readLine()) != null)
{
if( "over".equals(line))
break;
byte[] buf = line.getBytes();

System.out.println(line);
}
------------------------
day 21 (4.3)
------------------------
------------------------
day 22 (4.4)
------------------------
1. Java为GUI提供的对象都存在java.Awt和javax.Swing包里.
java.Awt, abstract window tookit, 抽象窗口工具包. 调用本地系统方法实现功能, 属重量级控件.
javax.Swing, 在AWT基础上, 简历的一淘图形界面系统, 有更多组件. 完全由Java实现, 增强了移植性, 轻量级控件.
2. **重量级调用系统方法, 与系统更相关. 轻量级与系统依赖性弱, 移植性强.
3.

4. 容器中的组件的排放方式, 是布局. 常见布局管理器:
1. FlowLayout(流式布局管理器): 从左到右的顺序排列. Panel默认的布局管理器.
2. BorderLayout(边界布局管理器): 东南西北中. Frame默认的布局管理器.
3. GridLayout(网格布局管理器): 规则的矩阵.
4. GridBagLayout(网格包式布局管理器): 非规则的矩阵(可以用n个网格表示一个组件) .
5. CardLayout(卡片布局管理器): 选项卡.
5.
import java.awt. *;
import java.awt.event. *;

public class MouseAndKeyEvent
{
private Frame f;
private Button but;

public MouseAndKeyEvent()
{
init();
}

public void init()
{
f = new Frame( "my frame");
f.setBounds( 300, 100, 600, 500);
f.setLayout( new FlowLayout());

but = new Button( "my button");

f.add(but);

myEvent();

f.setVisible(true);
}

private void myEvent()
{
f.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit( 0);
}
});

/*but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("button do it");
System.exit(0);
}
});*/


but.addMouseListener( new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println( "鼠标进入该组件" + count ++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
System.out.println( "双击动作 " + clickCount ++);
}
});

but.addKeyListener( new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
System.out.println(e.getKeyChar());
}
});
}

public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}
6. 先画界面再加事件.
------------------------
day 23 (4.7)
------------------------
1. 网络通讯要素:
1. IP地址: InetAddress对象.
2. 端口号: 0~65535.
3. 传输协议: TCP, UDP.
a. UDP:面向无连接(不管有没有连接, 就是发. 收不到拉到), 速度快, 不可靠. . 每个数据报最大64k.
b. TCP: 建立连接, 效率低. 通过三次握手完成连接, 可靠协议. 进行大数据量传输.
2. 每种协议都有不同的建立Socket的方式.
3. ip地址: *.*.*.255 是广播地址, 向此网段的所有机器发送广播.
4. UDP分发送端和接收端, TCP分客户端和服务端.
5. UDP相关类DatagramSocket, DatagramPacket. TCP的Socket, ServerSocket.
6. java.io.PrintWriter对象不抛出IO异常, 调用println,printf,format方法后自动刷新(flush), println会使用不同平台的换行符. 因此, 有时候比BufferedWriter对象方便.
------------------------
day 24 (4.9)
------------------------
1. public static void main(String[] args):
用java AsdClass paramater1 paramater2 命令运行时, args = {paramater1, paramater2 }
------------------------
day 25 (4.9)
------------------------
<正则表达式> java.lang.String和java.util.regex
1. 匹配功能: String.matches()方法.
\\ 代表\
\n 代表换行
...等等...
[abc] 代表a或b或c (可以是数字)
[^abc] 代表除a,b,c以外的
[a-zA-Z] 代表a到z和A到Z并集
. 代表任意字符
\d 数字[0-9]
\D 除0到9
\s 代表空白字符, [ \t\n\x0B\f\r]
\S 非空白字符
\w 单词字符[a-zA-Z0-9]
\W 代表[^\w]
X? 代表X出现一次或没有
X*? 出现零次或多次
X+? 代表X出现一次或多次
X{n} 出现n次
X{n,} 出现最少n次
X{n,m} 出现n到m次(包括)
2. 切割功能: String的split()方法.
(.)\1 用小括号括起来表示组, 编号从左到右从1开始(组0代表整个表达式). \1表示第一组所匹配过的再次出现.
例如: "sdfqqKjljkksdzz".split("(.)\\1") 可以将字符串从qq,kk,zz处分割.
3. 替换功能: String的replaceAll()方法和replaceFirst().
"abccdeffg".replaceAll("(.)\\1", "$1"); 得到"abcdefg"字符串. $符号表示取前一个正则表达式的组.
4. 获取功能:
a. 将正则表达式封装成对象, b. 让正则对象和字符串关联, c. 关联后, 获取正则匹配引擎, 4. 通过引擎对符合规则的字串进行操作, 比如取出
使用java.util.Matcher的group()方法取出, 使用group()取出之前需要先用find()方法查找一下.


import java.util.regex. *;

class RegexDemo2
{
public  static  void main(String[] args)
{
getDemo();
}

// 获取长为三的单词. 
public  static  void getDemo()
{
String str  =  "ming tian jiu yao fang jia le ,da jia. ";

String reg  =  "\\b[a-zA-Z]{3}\\b";

Pattern p  = Pattern.compile(reg);

Matcher m  = p.matcher(str);

while(m.find())
{
System.out.println(m.group());
System.out.println(m.start() + "...." +m.end());
}
}
}




你可能感兴趣的:(读书笔记)