本文是学习Java时所记录的学习笔记,本节包含了Java面向对象的概念以及各类成员介绍,是从《疯狂Java讲义第四版》中学习,提取了部分我觉得是重点的内容。欢迎留言、私信交流~~
概念 | 内容 |
---|---|
3大特性 | 封装、继承、多态 |
3种类型 | 类、接口、枚举 |
4个修饰符 | private | protected | public、final、static、abstract |
5大成员 | 类、成员变量、方法、构造器、初始化块 |
名称 | 修饰符 |
---|---|
类 | public,final,abstract |
成员变量 | public | protected | private,static,final,transient |
方法 | public | protected | private,static,final | abstract |
构造器 | public,protected,private |
[修饰符] class 类名 extends 父类
{
//零个到多个构造器定义...
//零个到多个成员变量(field)...
//零个到多个方法...
}
[修饰符] 类型 成员变量名 [ = 默认值];
[修饰符] 方法返回值类型 方法名(多个形参声明)
{
//由零条到多条可执行性语句组成的方法体。
//如果方法签名中有返回值类型声明,该方法里必须包含有效的return语句。
}
[修饰符] 构造器名(形参列表)
{
//由零条到多条可执行性语句组成的构造器执行体
}
Person p = new Person();
this引用
this调用
This调用只能在构造器的第一行出现。
JAVA语法规定:静态成员不能访问非静态成员。(如带有static修饰的静态方法,不能直接调用非static修饰的方法)
public static int fn(int n)
{
if (n ==1){
return 2;
}else if(n ==2){
return 2;
}else{
return 2*fn(n-1)+fn(n-2)
}
}
名称 | 名称1 | 名称2 | 名称3 |
---|---|---|---|
成员变量(位置:类中定义的是成员变量) | 类变量(以static修饰) | 实例变量(不以static修饰) | |
局部变量(位置:方法中定义的是局部变量) | 形参 | 普通局部变量 | 代码块的局部变量 |
当创建的实例调用带有static的成员变量时,该成员变量并不属于实例。对该成员变量所做的改变,会导致直接在堆内存中更改,其他实例调用时会显示改变后的结果。
import 包名.类名; //每次导入一个类
import 包名.*; //导入包名下的所有类
import:省略写包名。
import static:可以省略写类名。
import static 包名.类名.静态成员名; //每次只导入一个静态成员。
import static 包名.类名.*; //导入指定类的所有静态成员。
[修饰符] class 类名 extends 父类{
}
super.父类定义的实例变量
super.父类定义的实例方法();
super调用:super紧跟括号。调用父类的构造器。
super(参数);
(type)variable
变量名 instanceof 类型
//调用同一个类中重载的构造器,只能出现在构造器的第一行。调用同类的其他构造器。
this(name,color)
[修饰符] {
//初始化块的可执行性代码
}
基本类 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
Integer.parseInt() //可将字符串转成Int类型。
Long.parseLong() //可将字符串转成Long类型
XXX.parseXXX() //可将字符串转成对应的XXX类型
@Override
public String toString()
{
return "chongxie[a="+a+"],[b="+b+"];";
}
@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj != null && obj.getClass()==Goat.class){
Goat target = (Goat)obj;
return this.color.equals(obj.color)&&this.weight==obj.weight;
}
return false;
}
private static Singleton s;
private Singleton(){}
public static Singleton create(){
if(s == null){
s = new Singleton();
}
return s;
}
abstract class xingzhuang
{
private String color;
public abstract double getzhouchang();
public abstract String getType();
public xingzhuang(){}
public xingzhuang(String color) {
this color = color;
}
public void setcolor(String color){
this color = color;
}
public String getcolor(){
return this color;
}
}
class sanjiaoxing extends xingzhuang{
private double a;
private double b;
private double c;
public sanjiaoxing(String yanse,double i,double j,double k){
super(yanse);
if (i>j+k||j>i+k||k>i+j){
System out println("三角形输入的尺寸不成立");
return;
}
this a = i;
this b = j;
this c = k;
}
public double getzhouchang(){
return a+b+c;
}
public String getType(){
return "三角形";
}
}
class yuanxing extends xingzhuang{
private double r;
public yuanxing(String yanse,double i){
super(yanse);
this r = i;
}
public double getzhouchang(){
return 2*Math PI*r;
}
public String getType(){
return "圆形";
}
public static void main(String[] args){
xingzhuang san1 = new sanjiaoxing("黑色",5,5,5);
System out println("形状"+san1 getType()+"的颜色为"+san1 getcolor()+"。它的周长为:"+san1 getzhouchang());
xingzhuang yuan1 = new yuanxing("红色",5);
System out println("形状"+yuan1 getType()+"的颜色为"+yuan1 getcolor()+"。它的周长为:"+yuan1 getzhouchang());
}
}
[修饰符] interface 接口名
{
//0~N个field定义。
//0~N个抽象方法。
//0~N个内部类、内部接口、内部枚举定义
}
class 类名 implements 接口名 //实现一个或N个接口。
interface Ilearn{
public final String name = "张三";
public abstract String zhuanye();
}
class jisuanji implements Ilearn{
public String zhuanye(){
return "计算机";
}
public static void main(String[] args){
System out println(new Ilearn(){
public String zhuanye(){
return "测试";
}
public String toString(){
return name+zhuanye();
}
});
}
}
外部类.内部类 变量名;
Outer.Inner in;
Outer ou = new Outer();
in = ou.new Inter();
外部类.内部类 变量名 = new 外部类().new 内部类();
extends 外部类.内部类 //在类的后面加这一段
new 外部类().super();
//new一个宿主对象调用,使用两条中的其中一条即可
ou.super();
//使用已有宿主对象调用,使用两条中的其中一条即可
new 接口() | 父类构造器(参数)
{
//类体部分
}
interface Ilearn{
public final String name = "张三";
public abstract String zhuanye();
}
class jisuanji implements Ilearn{
public String zhuanye(){
return "计算机";
}
public static void main(String[] args){
System out println(new Ilearn(){
public String zhuanye(){
return "测试";
}
public String toString(){
return name+zhuanye();
}
});
}
}
修饰符 enum 枚举名{
//立即在第一行该枚举的所有实例。
}
Gender g = Enum.valueOf(Gender.class , “FEMALE”)
//通过Enum的valueOf方法,获得Gender.class的FEMALE枚举值。
for (xingbie a:x.values()){System.out.println(a); }
//通过enum的values()方法,可以获取枚举的所有实例。
命令 | 说明 |
---|---|
.jar | 里面包含N个class文件。 |
.war(Web) | 一个Web应用打包生成的包。 |
.ear(Enterprise) | 企业应用打包生成的包。 |
命令 | 说明 |
---|---|
c | 创建新的压缩包 |
t | 列出压缩包里的文件和目录 |
x | 从压缩包中提取指定的(或所有)文佳 |
u | 更新现有的压缩包 |
v | 提供更详细的信息 |
f | 为压缩包指定文件名 |
m | 包含指定清单文件中的清单信息 |
e | 为可执行jar文件的独立应用程序指定应用程序入口点 |
1.创建压缩包
jar -cf mytest.jar *.class //压缩*.clss文件,命名为mytest.jar
jar -cvf mytest.jar *.clss //压缩*.clss文件,命名为mytest.jar,并显示详情
2.创建压缩包,不生成清单文件。
jar -cMf mytest.jar *.class //压缩*.clss文件,命名为mytest.jar,不生成清单文件
3.查看压缩包
jar -tf mytest.jar //列出mytest.jar的文件和目录
jar -tvf mytest.jar //列出mytest.jar详细的文件和目录
4.解压压缩包
jar -xf mytest.jar //解压mytest.jar文件
jar -xvf mytest.jar //解压mytest.jar文件,并显示过程
5.更新压缩包
jar -uvf mytest.jar *.clss //更新*.clss文件到mytest.jar压缩包,并显示详情
6.指定压缩包主类
jar -cvfe mytest.jar UserTest *.clss
//把*.class文件压缩为mytest.jar,并显示详情,指定UserTest为该包的主类。
7.执行jar包
java -jar mytest.jar //运行控制台的程序
也可在JVM中直接双击执行。
javaw -jar mytest.jar //运行有界面的程序
public static void main(String[] args)
java 主类类名 第1数组元素 第2数组元素...
import java.util.*;
Scanner sc = new Scanner(System.in);
//hasNextLine表示获取下一行。
while(sc.hasNextLine())
{System.out.println(sc.hasNextLine());}
exti(int status) //退出虚拟机。
getenv() //获取所有环境变量。
getenv(String name) //获取指定环境变量的值。
static Properties getProperties() //获取所有系统属性。
static String getProperty(String key) //获取指定系统属性的值。
rt.maxMemory() //查看总内存。
rt.totalMemory() //查看已用内存。
rt.freeMemory() //查看空闲内存。
rt.exec() //运行操作系统已有的命令。
new Date(long) //把毫秒数转换为日期,从1970年1月1日开始。
getTime() //Deprecated,返回一个毫秒。
set(年,月,日,时,分,秒) //设置时间。
set(Field , val) //直接设置某个字段的值。
getTime() //获取年月时分秒格式的时间。
add(int field,int amount) //在某个字段原有值的基础上更改,当超过允许范围时发生进位。
roll(int field,int amount) //在某个字段原有值的基础上更改,当超过允许范围时不进位。
```
System.currentTimeMillis()
//获取从1970年1月1日到现在过了多少毫秒。
```
可以匹配N个字符换的字符串模板。
Java支持的通配符
通配符 | 说明 |
---|---|
. | 可以匹配任意字符。 |
\s | 代表一个任意的空白(空格、Tab)。 space |
\S | 代表一个任意的非空白。 |
\d | 代表一个任意的数字。 digital |
\D | 代表一个任意的非数字。 |
\w | 代表一个单词字符。 word |
\W | 代表一个任意的非单词字符。 |
特殊字符
特殊字符 | 说明 |
---|---|
( ) | 例如(com |
[ ] | |
{ } | |
\ | |
? | |
* | |
+ | |
^ | 表示一行的开头 |
$ | 表示一行的结尾 |
| |
方括号表达式
名词 | 方括号表达式 | 说明 |
---|---|---|
枚举 | [ax中] | 代表a或x或中其中的任意一个字符。 |
范围 | [a-f] | 代表a到f其中的任意一个字符。 |
枚举与范围共存 | [a-f5-7] | 代表a-f和5-7其中的任意一个字符。 |
表示求否 | [^a-f] | 不是a-f字符的任意一个字符即可。 |
表示求交 | [a-g&&[^b-d]] | 在a-g且不是b-d字符的任意一个字符即可。 |
表示出现次数的“副词”
符号 | 说明 |
---|---|
? | 表示它前面的东西可出现0~1次。 |
* | 表示它前面的东西可出现0~N次。 |
+ | 表示它前面的东西可出现1~N次。 |
{n,m} | 表示它前面的东西可出现n~m次。 |
{,m} | 表示它前面的东西最多可出现m次。 |
{n,} | 表示它前面的东西最少可出现n次。 |
{n} | 表示它前面的东西必须出现n次。 |
String里与正则表达式相关的方法
方法 | 说明 |
---|---|
atches(String regex) | 判断字符串是否能匹配【正则表达式模板】。 |
eplaceALL(String regex, String replacement) | 把符合正则表达式的替换为新String。 |
eplaceFirst(String ) | |
plit(String regex) | |
\w+".matches(str2) | //检查str2和前面的正则表达式是否匹配,不匹配返回false。 |
JAVA专门的正则表达式类
资源文件 - 负责为程序提供国际化消息
文件名:_语言代码_国家代码.properties
内容:hello =Hello World!
内容:hi = {0},hello!i am {1}。
//{0}代表第一个占位符,{1}代表第二个占位符。
处理文件:native2ascii 要处理的文件名 生成的新文件名
//在老版本中,如果资源文件包含了非西欧字符,需要使用native2ascii来处理这个文件。
getBundle(baseName, 语言代码_国家代码);
搜索资源文件的顺序:
A. baseNaem_语言代码_国家代码.properties
B. baseName_语言代码.properties
C. baseName.properties
如果没有就无效。
描述国家简写的类
Locale[] locales = Locale.getAvailableLocales()
//获取Java语言支持的所有Locale。
getLanguage() //获取语言代码。
getCountry() //获取国家代码。
getDisplayCountry() //获取国家实际的名字。
getDefault(Locale.Category category)
//获取当前计算机的语言、国家环境。例如返回zh_CN。通常写Locale.Category.FORMAT
加载国际化资源的类
ResourceBundle bundle = ResourceBundle.getBundle(String baseName, Locale locale) //加载国家化资源文件。
bundle.getString("hi")
//从bundle加载的文件中查找hi对应的字符串进行替换。
负责为消息中的占位符填充参数值
format(String pattern, Object... arguments) //模板
例子:format(bundle.getString("hi"),args[0])
//用arguments依次替换每个占位符。
国际化例子
import java util *;
import java text *;
class HelloWorld{
public static void language(){
Locale[] yuyan = Locale getAvailableLocales();
for(Locale a : yuyan){
System out println(a getDisplayCountry()+"==="+a getLanguage()+"==="+a getCountry());
}
}
public static void main(String[] args){
String a = "lee";
Locale locales = Locale getDefault(Locale Category FORMAT);
ResourceBundle bundle = ResourceBundle getBundle("language2local",locales);
System out println(MessageFormat format(bundle getString("nianling"),a));
//HelloWorld language();
}
}
方法 | 说明 |
---|---|
getCurrencyInstance() | 格式化成货币字符串。 |
getIntegerInstance() | 格式化成整型字符串。 |
getPercenInstance() | 格式化成百分号字符串。 |
方法 | 说明 |
---|---|
format(double number) | 将数值转换成相应的字符串。 |
方法 | 说明 |
---|---|
getDateinstance() | 得到一个日期格式器,格式化出来的字符串只有日期部分。 |
getTimeInstance() | 得到一个时间格式器,格式化出来的字符串只有时间部分。 |
getDateTimeInstance() | 格式化出来的字符串有日期、时间。 |
import static java.text.DateFormat.*;
//下面的参数省略了DateFormat类。
DateFormat a = getDateTimeInstance(SHORT,SHORT)
//18-11-21 下午5:34
DateFormat a = getDateTimeInstance(MEDIUM,MEDIUM)
//2018-11-21 17:34:08
DateFormat a = getDateTimeInstance(LONG,LONG)
//2018年11月21日 下午05时34分08秒
getDateTimeInstance(FULL,FULL)
//2018年11月21日 星期三 下午05时34分08秒 CST
getDateTimeInstance(SHORT,SHORT,Locale.US)
//11/21/18 5:34PM。以美国的显式风格展示。
a.format(Date d) //将日期转换成相应字符串。
SimpleDateFormat sdf = new SimpleDateFormat("我的生日:yyyy年MM月dd日");
Date d = new Date();
System.out.println(sdf.format(d));
String dateStr = "2018/11%08 13.12";
SimleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM%dd HH.mm");
Date d = sdf2.parse(dateStr);
Sytem.out.println(d);