重构之 Java 基础部分

Java介绍

Java由sun Microsystems公司与1995年5月推出,java面向对象程序设计语言和java平台的总称。由James Gosling和同事共同研发。

Java分为三个体系:

JavaSE(J2SE)(java2 plalform standard edition,java 平台标准版)

JavaEE(J2EE) (java2 plalform Enterprise Edition java平台企业版)

JavaME(J2ME) (java2 plalform Micro Edition,java平台微型版)

 

Java特性:

简单、面向对象、分布式、健壮(丢弃指针,杜绝非法访问)、平台无关(一次编译处处运行)、安全、体系结构中立、可移植、解释型、高性能、多线程、动态等特性。

 

Java工作原理:

Java 虚拟机,JVM。Java程序在java虚拟机上运行,是java程序的运行环境。

Java编写的程序(.java文件)经过编译器编译生成字节码文件,字节码文件不是针对平台的,是针对java虚拟机的,即不同的平台需要安装不同的虚拟机。不同的虚拟机屏蔽了各个不同平台的差异,从而使java程序具有平台无关性。

.java(文件)----编译----> .class(字节码文件) ---执行----JVM(不同操作jvm)

在jvm内部:类装载器-->字节码效验器---->解释器---->操作系统

类装载器:执行程序寻找和装载所需的类(把字节文件装到虚拟机)

字节码效验器:对字节码进行效验,进行测试代码段,规则检查

解释器:将字节码文件翻译成所在平台认识的东西。

 

JavaSE结构:

JavaSE是java的基础,包括java基础语言、JDBC数据库操作、I/O、网络通讯、多线程等技术。

JDK是java应用程序的开发环境:

Javac:编译器,编译成字节码

Java:执行器,执行字节码

Javadoc:文档生成器,注释文档

Jar:打包工具,相关类打包成文件

Java.lang:系统基础类库;

Java.io : 输入输出类库

Java .ent: 网络相关类库

Java.util: 系统辅助类库

Java.sql: 数据库操作类库

Javax.servlet: jsp、servlet等使用到的类库。

 

JRE是java程序的运行环境,有jvm等。

 

 

Java基础语法

Java程序是一系列对象的集合,这些对象通过调用彼此的方法来协同工作。

对象:对象是类的一个实例(例如class Student,‘小明’就是studnet的一个对象)

类: 类是一个模板,它描述一类东西的行为和状态(属性)。

方法:就是类里面的行为。通过逻辑运算、数据修改等动作都是在方法中完成

实例变量:每个对象都有独特的实例变量,对象的状态由实例变量的值决定。

 

例如 :把地球分为动物、人类、植物。每一个是一个类。

我就是人类这个类的一个对象。

在人类这个大类中有  行为(呼吸、说话)和属性(耳朵、鼻子)

 

标识符:

Java所有组成部分都需要名字。类名、变量名以及方法名都成为标识符

所以标识符都应该是由(字母、美元符、下划线)(开头)以及数字组成

关键字不做标识符,有大小写敏感。

 

Java变量

关于变量其实是相对于类、方法而言的。方法中定义的变量为局部变量,类中定义的无static的为成员变量,有static修饰的为类变量。

局部变量(在方法或语句块中)

类变量(静态变量static)

成员变量(非静态变量)

 

Java数组:

数组是存储在堆上的对象。可以保存多个同类型变量。

Java枚举:

枚举限制变量只能是预先设定好的值。相当于常量(只能是限定中选择)

enum FreshJuiceSize{ SMALL, MEDIUM , LARGE }

juice.size = FreshJuice.FreshJuiceSize.MEDIUM ;

 

java继承:

一个类可以由其他类派生,如果你要创建一个类,而且已经存在一个类具体有你所需的属性或方法,那么你可以将新创建的类继承该类,获得该类的方法和属性。即重用已存在的类的方法或属性。被继承的类为超类(super class),派生类,子类(sub class)

 

接口:

对象间相互通信的协议,接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。

 

 

Java对象和类

Java作为面向对象语言,支持一下基本特点:

多态、继承、封装、抽象、类、对象、实例、方法、重载。

Java对象:

对象有自己的状态和行为。即属性和方法。一个类可以由多个对象。如员工表中有个员工信息,每一个员工就是这个员工类的对象。

Java类

创建java对象的模板。一个类包含以下特点

局部变量:在方法、构造方法或者语句块中地沟油的变量。随之结束而销毁

成员变量:定义在类中,方法体之外的变量。在创建对象的时候实例化,类中可用

类变量:类变量声明在类中,方法体之外,使用static修饰编译时实例化

 

成员变量和类变量:

成员变量随着对象的创建而存在,随着对象的回收而释放

类变量随着类的加载而存在,随着类的消失而消失

成员变量只能被对象调用

类变量可以被对象调用,还可以被类名调用

成员变量------实例变量

类变量-------静态变量

成员变量存储在堆内存的对象中,即对象特有数据

类变量数据存放在方法区(共享数据)的静态区

 

构造方法:

每个类都有构造方法,如不定义,则编译器提供默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法名和类名同名。

 

创建对象:

对象是根据类创建的,

声明:声明一个对象,包括对象名称和对象类型

实例化:使用关键字new创就一个对象(分配空间)

初始化:使用new创建对象时,调用构造方法初始化对象(赋值到空间)

 

Java基本数据类型

变量就是申请内存来存储值。当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间能用用来存储该类型数据。因此通过定义不同类型的变量可以在内存中存储整数,小数或字符。

 

Java有两大数据类型:

内置数据类型:

java提供了八种基本数据类型。六种数字类型(四种整数型、两种浮点型)一种字符类型,还有一种布尔类型。

byte:八位一字节,[-128,127],默认0        (2的7次方)

short:十六位双字节,[-32768,32767] , 默认0  (2的15次方)

int:三十二位四字节,[-2147483648,2147583647],默认 0 (2的31次方)

long:六十四位八字节,默认  0L     (2的63次方)

 

float:32位4字节,单精度浮点 默认 0.0f

double:64位8字节,双精度浮点 默认0.0d

 

boolean:数据类型表示一位的信息。默认false

 

char:单一的16位Unicode字符[0,65535]  \u0000 ---\uffff

 

 

引用数据类型

变量声明后,类型就不能改变

对象、数组都是引用数据类型

所有引用类型的默认值都是null

一个引用变量可以用来引用任何与之兼容的类型

 

Java常量

常量在程序运行时是不能被修改的,使用final修饰

 

自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转换为同一类型,然后进行运算。

byte---short---char---int---long---float---double

转换规则:

不能对double类型进行类型转换

不能把对象类型转换成不相关类型的对象转换

容量大的类型转换成容量小的类型必须强转转换。

转换过程可能导致溢出或精度丢失。

 

Java变量类型

静态变量属于类,该类不产生对象,通过类名可以调用静态变量。

实例变量属于该类的对象,需要创建该类对象,才能调用实例变量。

 

实例变量属于某个对象的属性,必须创建实例对象,实例变量才会被分配空间。

静态变量属于类,只要程序加载类的字节码,就会被分配空间,既可以使用。

 

Java修饰符

访问修饰符

default(默认):同胞可见,不使用任何修饰符。类、接口、变量、方法

private私有,类内可见。不能修饰类。  变量、方法

Protected受保护,同包类和子类,不能修饰类。变量、方法

public 公共 对所有类可见。 类、变量、接口 、方法

 

非访问修饰符

static:

静态变量,无论一个类实例化多少对象,它的静态办理只有一份拷贝。局部变量不能被声明为静态变量。

静态方法,不能使用类的非静态变量。

final:赋值后不能再被重新赋值,修饰类(不能被继承)、修饰方法(不能重写)

abstract:

抽象类,不能实例化对象,(包括抽象方法,非抽象方法)

抽象方法,是一种没有任何实现的方法,具体实现由子类提供。抽象方法不能被声明为final或static。抽象方法没有方法体

 

synchronized:

synchronized声明的方法,同一时间只能被一个线程访问。

 

Transient:序列化的对象包含被transient时,jvm跳过该特定的变量。

 

Java运算符

算术运算符:+、-、*、/、%、++、--

关系运算符:==、!=、>、<、>=、<=

位运算符:&、|、^、~、<<、>>、>>>(一为一,零为零,同为零,左乘右除)

逻辑运算符:&&、||、!(真为真,假为假,反转)

赋值运算符:=、+=、-=、/=、*=、%=、<<=、>>=、&=、^=、|=

其它运算符:三元运算(a?b:c)

 

Java循环

while循环

可用于选择退出界面。While 条件{  体...   }

while true{ if (a == ‘over’) {break;}}

 

do....while循环

do{ 体...}while(条件) 至少执行一次

 

for循环

双层for或多成for循环可用来列表遍历等。

增强for,即foreache类似于python中的for(int x :list){}

 

调用自身

void test(n){

  test(n-1);

}

 

选择语句

if 条件语句

if(布尔表达式){ true体  }else{  false体 } 真假选择问题

If(){}else if(){ }else{ }            

if(){ if(){  }}   嵌套if语句

 

switch case

判断一个变量与一系列中某个值是否相等

switch(变量){  case value1 :  体.. break;     case value2:   体..   break;     }

 

Java 类

Math类

N.equals(n) 判断对象是否与参数相等(是对象int  Integer)

N.valueOf() 返回一个number对象知道的内置数据类型

        N.parseInt() 将字符串解析为int类型

Math.ceil()  取地板,小整数

Math.floor()  取天花板,大整数

Math.rund()  四舍五入。

 

Character类

Character类在对象中包装一个基本类型char的值,用于对单个字符进行操作。

例如,要将一个char类型的参数传递给需要一个Character类型参数的方法时,那么编译器会自动将插入类型参数转换为character对象,这种特征称为装箱,反转之拆箱。

idLetter()是否是一个字母

isDigit()是否是一个数字字符

isWhiltespace()是否是一个空白字符

 

String类(不可修改)

Java中字符串属于对象,提供String类来创建和操作字符串

str1.concat(str2):连接两个字符串

str1.length() : 字符串长度

charAt(int index): 返回指定字符索引的char值(单个字符)

compareTo(object  0):把这个字符串和另一个对象比较

 

StringBuffer类(可被修改,不产生新的对象,线程安全(同步访问))

append(string s):追加字符序列

reverse():反转字符序列

capacity():返回当前容量

StringBuilder类(可被修改,不产生对象,线程不安全,速度快于stringbuffe)

 

 

 

Java 数组

Java 数组是用来存储固定大小的同类型元素。

double[ ] list ; 声明数组

listname =new type[size] ; 创建数组,把数组引用赋给list

 

datatype[ ] arrname = new  datatype[ size] ; 数组的声明、创建

datatype[ ] arrname = { value ,value1.....}  ; 声明、创建数组 赋值

二维数组也是同样的

先声明再创建(声明,就是定义要分配什么类型的,什么东西。。。。。创建就是在内存中申请分配存储 定义 的空间。)

 

Java 日期时间

Date类提供两个构造函数实例化date对象,

Date()使当前日期时间初始化对象

Date(long millisec)该参数是从1970年1月1日起的毫秒数

 

获取当前日起时间,并格式化。

Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd  HH:MM:ss");
System.out.println(ft.format(date));

使用printf格式化日期。

System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
System.out.printf("年-月-日%tF%n",date);

 

 

Java休眠(sleep)

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该该进程所获的CPU资源,以留一定时间给其它线程执行的机会。

 

Thread.sleep(5*60*10); //休眠3秒

 

Calendar类

获取日期数据的特定部分,如小时,日,分钟等。

cakebdar c1 = Calendar.getInstance() //创建当前系统日期对象

c1.set(2020,5 - 1,12)

 

Java 方法

方法是解决一类问题的步骤的有序组合,包含于类对象中。

方法重载,方法的名字相同,参数列表不同

 

命令行传参

即在命令行下编译,执行,并传入相应的参数给main方法

public static void main(String args[]){ 

for(int i=0; i<args.length; i++){

 System.out.println("args[" + i + "]: " + args[i]);

 } 

}

Javac testjava         

Java test ni hao i am very good

 

 

构造方法

当一个对象被创建时候,构造方法用来初始化该对象。构造方法和类名相同,没有返回值,也没有void。所有类都有构造方法,java自动提供默认构造方法。

可变参数

即在方法参数指定类型的一个可变的参数,必须是方法的最后一个参数。

Pri(int t, double.....numbers){   }

 

 

Java 流(Stream)、文件(file)和io

一个流可以理解为一个数据序列。输入流表示从一个源文件读取数据,输出流表示像一个目标写入数据。

 

FileInputStream

用于文件读取数据。字节流输入

byte bWrite[] = { 11, 21, 3, 40, 5 };

OutputStream os = new FileOutputStream("test.txt");

 for (int x = 0; x < bWrite.length; x++) { 

os.write(bWrite[x]); // writes the bytes

 } 

os.close();

会有乱码,所以需要如下。

File f = new File("a.txt");

 FileOutputStream fop = new FileOutputStream(f); // 构建FileOutputStream对象,文件不存在会自动新建 OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");

 

 

 

java目录

mkdir()创建一个文件夹,成功返回true。

mkdirs()创建一个文件夹和它所有父文件夹

 

String dirname = "/tmp/user/java/bin";

File d = new File(dirname); // 现在创建目录 

d.mkdirs();

 

 

Scanner类

通过Scanner类获取用户输入。

Scanner s = new Scanner(System.in);

 

判断是否还有输入

if (scan.hasNext()) { 

String str1 = scan.next();

 System.out.println("输入的数据为:" + str1);

 }

 

next()与nextLine()的区别

next():

一定要读取到有效字符后才可以结束输入,对空白,自动去掉,但输入字符后空白分为分隔符或结束符。

nextLine():

以enter为接收,可以获取空白。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值