【从零开始学Java笔记】Java基础

大家可以关注作者的账号,关注从零开始学Java笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。

【从零开始学Java笔记】目录

这里的Java基础并不是真正的Java基础,而是一些无法分类的Java知识,如果这里有不懂得知识没有关系,可以继续学习下去。

Java关键字

Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
——来自java关键字总结及详解

首先大家需要了解一下什么是关键字,但是并不需要死记硬背,大致了解即可,因为后期常用的那几个关键字会被经常使用,自然就记住了。

Java 命名规范

1、项目名全部小写
2、包名全部小写
3、类名首字母大写,其余组成词首字母依次大写
4、变量名、方法名首字母小写,如果名称由多个单词组成,除首字母外的每个单词的首字母都要大写
5、常量名全部大写
6、所有命名规则必须遵循以下规则 :

  • 只能由字母、数字、下划线、$符号组成
  • 不能以数字开头
  • 不能使用Java中的关键字

什么是包

就是类似文件夹的一个东西,我们一般把Java文件按照需要装在不同的包下面

包的特点

可以有多层,例如java.util.Scanner,java是一个包,util也是一个包,Scanner是包下的一个类
不同包下的文件名可以重复,相同包下不可重复
包的声明必须是第一行代码

不同包之间的互相访问

1.使用类的全名(包名.类名)

java.util.Scanner sc = new java.util.Scanner(System.in);

但是这样十分繁琐,所有我们引出了第二个方法
2.使用关键字import将类导入

import java.util.Scanner;
Scanner sc = new Scanner(System.in);

注意: *代表的是通配符,代表导入了这个包下所有的类,并没有导入子包下的类

foreach循环

foreach:增强for循环,一般用于遍历集合或者数组
格式:
for(元素的类型变量:集合或者数组对象) {
可以直接使用变量;
}
举例:

import java.util.ArrayList;
import java.util.Collection;

public class ForeachDemo {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<String>();
		
		c.add("hello");
		c.add("world");
		c.add("java");
		
		for(String i:c) {
			System.out.println(i);
		}
	}
}
输出结果:
hello
world
java

包装类

由于基本数据类型只能做一些简单的操作和运算,所以Java为我们封装了基本数据类型,为每种基本数据类型提供了包装类。包装类就是封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量

数据类型 包装类
byte Byte
short Short
char Character
int Integer
long Long
foat Float
double Double
boolean Boolean

Integer:
String -> int
方式1: int intValue( )
方式2: static int parseInt(String s)
int -> String
方式1: + " "
方式2: String toString()

构造方法:
Integer(int value)
Integer(String s)

自动装箱和拆箱

JDK1.5特性:自动装箱和拆箱

//自动装箱
//相当于: Integer i = new Integer(10);
Integer i = 10;

//自动拆箱
//相当于int. a = i. intValue();
int a = i;

应用场景

ArrayList list = new ArrayList();
list . add(1);//自动装箱,list.add(new Integer(1));

正则表达式

正则表达式:就是一套规则,可以用于匹配字符串

boolean matches(String regex) :判断当前字符串是否匹配指定的正则表达式,如果匹配则返回true,否则返回false

常用正则表达式,全部表达式可以在API-String类-matches()方法中找到,如何查阅API请查看相应章节博客。
以下是常用的正则表达式

字符
x 字符 x
\ 反斜线字符
字符类
[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 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

实例:校验手机号码是否输入正确


public class RegexDemo {
    /*  <br>     2020年3月26日已知
    中国电信号段
        133,149,153,173,174,177,180,181,189,199
    中国联通号段
        130,131,132,145,146,155,156,166,175,176,185,186
    中国移动号段
        134(0-8),135,136,137,138,139,147,148,150,151,152,157,158,159,165,178,182,183,184,187,188,198
    上网卡专属号段(用于上网和收发短信,不能打电话)
        如中国联通的是145
    虚拟运营商
        电信:1700,1701,1702
        移动:1703,1705,1706
        联通:1704,1707,1708,1709,171
    卫星通信: 1349 <br>     未知号段:141、142、143、144、154
    */
    public static void main(String[] args) {
        
        //10位
        String mobile = "1316667777";
        //11位
        String mobile1 = "13166687777";
        //12位
        String mobile2 = "131666777799";
        //开头不对
        String mobile3 = "23166687777";
        //带有字母
        String mobile4 = "131666a7777";
        
        System.out.println(mobile.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
        System.out.println(mobile1.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
        System.out.println(mobile2.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
        System.out.println(mobile3.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
        System.out.println(mobile4.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
    }
    
 
}

泛型

由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,所以java为了解决这个问题,给我们提供了一种机制,叫做泛型。
泛型是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
泛型好处:

  • 避免了类型转换的问题
    可以减少黄色警告线
    可以简化我们代码的书写

什么时候可以使用泛型?
当我们看到在API中看到某个方法后有,就可以使用泛型了

匿名对象

匿名对象:没有名字的对象
匿名对象的应用场景:
当方法只调用一次的时候可以使用匿名对象
可以当作参数进行传递,但是无法在传参之前做其他的事情
注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义

内部类

什么是内部类?

在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这三种:成员内部类、局部内部类和匿名内部类。在开始学习Java的时候,可能会觉得内部类没有什么意义,但是在后期的学习中会发现,内部类可以有效地提高代码的效率,让你的代码变得高效,优美。

成员内部类、局部内部类和匿名内部类的共性

  • 内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。
  • 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

成员内部类

在类的成员位置,和成员变量以及成员方法所在的位置是一样的
在内部类当中,可以直接访问外部类的成员,包括私有成员

成员内部类的修饰符:
我们可以使用权限修饰符修饰成员内部类,但是如果使用私有来修饰,则无法在其他类中访问
我们可以使用static修饰成员内部类,不用再创建外部类的对象了
我们可以使用abstract fina 修饰成员内部类

局部内部类

在方法内,出了方法之后就无法使用

匿名内部类

可以把匿名内部类看成是一个没有名字的局部内部类
定义在方法当中
必须在定义匿名内部类的时候创建他的对象

格式:
new 类/接口(){
如果是创建了继承这个类的子类对象,我们可以重写父类的方法
如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
};
原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象

匿名内部类的应用场景

作为参数进行传递

posted @ 2020-04-07 23:13  朱李洛克  阅读(406)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css