Java基础语法关于基本类型和对象类型

开课吧开课吧锤锤2021-06-17 11:26

    不管什么编程语言,都有它的一套规则,这里叫做语法。我们使用它的时候就要按语法来办。

Java

    什么是Java

    Java是一种为多个平台生成软件的编程语言。由SunMicrosystems的前计算机科学家JamesA.Gosling在20世纪90年代中期开发的。编译的代码可在大多数操作系统上运行,Java是一种面向对象的程序设计语言。

    那什么是面向对象呢?

    面向对象的方法主要是把事物给对象化,包括其属性和行为。

    面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象,(万物皆对象)。

    就是把生活中的事物同等兑换成编程语言。我的理解就是把实物电子化。

    从“HelloWorld”说起

    这个是开始Java的第一行代码。主要执行一个打印程序,在控制台输出“HelloWorld”。

/**
 *  我的第第一个java程序
 */
public class HelloWorld {

    /**
     * 我是main入口
     * 我使用的是多行注释
     * @param args
     */
    public static void main(String[] args) {

        /*我是一个单行注释*/
        // 我是打印方法
        System.out.println("HelleWord");
    }
}

    怎么运行呢?

    如果你用的是idea,因为是主函数,你直接根据下图的样式,运行程序,控制台就会输出“HelloWorld”。

JAVA

JAVA

    通过编译你的HelloWorld.Java。运行

 编译指令: javac + 文件路径
 
 javac HelloWorld.Java

    我直接在HelloWorld.java同路径下执行

运行指令: java + 文件名(不要文件后缀)

java HelloWorld

    运行后,在控制台打印出“HelloWorld”

    基本语法

    使用之前了解一些Java的基本规则

    1、大小写敏感:

    也就是只要有一个字母长的不一样,它就是不同的定义,如Hello和hello就是不同的标识符

    2、类名规则

    Java类名一般要和.Java的文件名一致,并且类名的首先字母应该大写。如果类名由多个单词组成,那么每个单词的首字母都要大写。比如上面的类HelloWorld。

    3、方法名

    所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

    4、源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

    5、主方法入口:所有的Java程序由publicstaticvoidmain(String[]args)方法开始执行。(每个程序只有一个主入口)

    Java标识符

    类名、变量名以及方法名都被称为标识符。在标识符的使用,需要注意以下几点

    1、所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始

    2、首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

    3、关键字不能用作标识符

    4、标识符是大小写敏感的

    合法标识符举例:age、$hello、_value、__1_key

    非法标识符举例:666abc、-hello

    注意:在上面合法标识符中,是不建议以下划线或者美元符号开始结尾的,合法不代表规范。后面会对规范做个介绍。

    关键字

关键字 含义
abstract 抽象类或方法
assert 用来查找内部程序错误
break 跳出一个switch或循环
byte 8位整数类型
case switch的一个分支
catch 捕获异常的try块子句
class 定义一个类类型
continue 在循环末尾继续
default switch 的缺省语句
do do/while 循环最前面的语句
double 双精度浮点数类型
else if语句的else子句
enum 枚举类型
extends 定义一个类的父类
final 一个常量,或不能覆盖的一个类或方法
finally try块中总会执行的部分
float 单精度浮点数类型
for 一个循环类型
if 一个条件语句
implements 定义一个类实现的接口
import 导入一个包
instanceof 测试一个对象是否是某个类的实例
int 32位整型数
interface 接口,一种抽象类型,仅有方法和常量的定义
long 64位长整数型
native 由宿主系统实现的一个方法
new 分配新的类实例
null 一个空引用
package 包含类的一个包
private 表示私有字段,或者方法等,只能从类内部访问
protected 表示保护类型字段
public 表示共有属性或者方法
return 从一个方法中返回
short 16位整数类型
static 这个特性是这个类特有的,而不属于这个类的对象
strictfp 对浮点数计算使用严格的规则
super 超类对象或构造函数
switch 选择语句
synchronized 对线程而言是原子的方法或代码块
this 当前类的一个方法或构造函数的隐含参数
throw 抛出一个异常
throws 一个方法可能抛出的异常
transient 标志非永久性的数据
try 捕获异常的代码块
void 标记方法不返回任何值
volatile 标记字段可能会被多个线程同时访问,而不做同步
while 一种循环

    注释

    注释就是对程序进行标注,不仅自己能更容易的看懂写的代码,别人也更容易来接盘你的代码,注释在编程中,起到引导的作用。平时写代码也要养成写注释习惯。回头通过注释看自己的代码也会更轻松。

    注释分多行注释和单行注释

    多行注释和单行注释

public class HelloWorld {

    /**
     * 我是main入口
     * 我使用的是多行注释
     * @param args
     */
    public static void main(String[] args) {
        
        /*我是一个单行注释*/
        // 我是打印方法
        System.out.println("HelleWord");
    }
}

    Java语言是静态类型的,也就是说所有变量和表达式的类型在编译时就已经完全确定。

    数据类型

    废话不多说,在Java中数据类型分为两大类:基本类型和对象类型。

    基本类型(8种)

类型 占用字节 取值范围
byte 1个字节 [-128,+127]
short 2个字节 [-32,768,+32,767]
int 4个字节 [-2,147,483,648,+2,147,483,647] [-2^31,+2^31-1]
long 8个字节 [-2^63,+2^63-1] 10^19
char 2个字节 一种特殊的整数,范围同short
double 8个字节 10^308
float 4个字节 10^38
boolean 1个字节 只有2个值,true和false

    在Java中,最高位代表符号位,1为负,0为正。以8位二进制为例,所以:

二进制 十进制
0 000 0000 0
0 111 1111 +127
1 000 0000 -128
1 111 1111 -1

    对象类型

    所有不是基本类型的都是对象类型,如:String、System...所以,我们编写程序,也就是不断地创建类型。因为我们想表达我们要表达的数据。下面介绍三种常用的对象类型。

    字符串

    定义

    有关字符串类型,java.lang.String类,它的本质就是char[],它的实现代码:

public final class String implements CharSequence{
 private char[] content;
 private int capacity;
 private int index;
 //...
}

    也就是说,字符串就是由字符数组组成的。但是,String是不变类,它的实例也就是不变对象。

    如:

String s1 = new String("abc");//一旦这个字符串生成,则就是不可变的。
s1 = "def";//ok,这是新建了字符串def ,原来abc 会被GC回收

    对于字符串而言,它是最常用的数据,所以,JVM针对它做了特殊处理;其次,专门有一个“串池”的内存空间来存放String实例,但是,字符串实例是否存放在串池中要由程序员的定义决定。

    创建字符串

    创建字符串的实例有如下两种方式:

    1、普通方式[在堆空间中]

String s1 = new String("abc");//ok
String s2 = new String("abc");//ok

System.out.println(s1 == s2);//false

    2、串池方式

String s3 = "abc";//ok
String s4 ="abc";//ok

System.out.println(s3 == s4);//true

s4 = "xyz";//此时,会在串池中重新申请空间并存放 xyz,并把地址赋给s4

    由于字符串是不变对象,所以,它的每一次拼接都会产生临时对象。

String s5 = "abc" + "def" + "xyz";//abcdefxyz

    这个代码会产生5个对象,其中,2个临时对象。s5是引用,是地址。

    所以,考虑到字符串的性能问题,JDK提供了StringBuilder拼接工作,它利用一个可变字符串数组来进行拼接。

    StringBuilder和StringBuffer

    StringBuilder和StringBuffer这两个类的区别:

    1.StringBuffer是多线程安全的类2.StringBuilder是多线程不安全的类

    本质上这两个类的功能一模一样,唯一不同的就是StringBuffer的所以方法都是同步的[synchronized]。

    建议大家使用StringBuilder,因为大多数时候我们的环境都是单线程环境的。即使是多线程环境,我们也可以自己加同步代码块来保证StringBuilder的多线程安全。

    常用方法

int length();//获取长度
boolean isEmpty();//判空
char charAt(int index);//根据位置获取字符
byte[] getBytes();//转化为字节数组
boolean equals(Object anObject);//判等
boolean startsWith(String prefix);//是否以prefix为前缀
int indexOf(int ch);//ch第一次在原字符串中出现的位置
String substring(int beginIndex, int endIndex);//获取子串
String concat(String str);//拼接
String replace(char oldChar, char newChar);//替换
String[] split(String regex, int limit);//分割
//...

    可以参考官网api,地址:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html。

    字符的编解码操作

    编码:把字符转换成字节的过程解码:把字节转换成字符的过程

    每一个字符背后都是一个整数[byte也是一种整数],所以,不同的字符集采用不同长度的编码,如:

    ASCII采用单字节GBK采用双字节编码UTF-8采用多字节[1~3]

    如:

String name = "张三丰";
//把此字符进行编码
byte[] arr = name.getBytes();//默认字符集
//
byte[] arr = name.getByte("UTF-8");

//也可以解码
String str = new Strin(arr);//默认字符集
String str = new String(arr,"UTF-8");//...

//有关字符串的切割 --split方法
String str = "abc:def:::haha:heihei::";
String[] arr = str.split(":");

     正则表达式

    定义:就是一些有“特殊”功能的字符序列。早先,JAVA并不支持正则表达式,从JDK1.4开始,引入了java.util.regex包,开始正式支持正则。

    如何使用正则:

    1.先把正则表达式[字符串]编译成Pattern实例2.利用Pattern提供的方法或者进一步得到Matchr3.利用Matcher进行匹配

    如:

String regex = "a";
Pattern p = Pattern.compile(regex);//把这个字符串[正则]编译成Pattern实例
String str = "aaaab";//准备你要测试的字符串
Matcher m = p.matcher(str);//得到Matceher对象

//str.matches(regex);
//Pattern.matches(regex,str);

//接下来就可以使用Matcher的方法
m.matches(); 匹配一次,成功为true,否则为false
m.find();//依次去尝试匹配多次
m.group();//配合find使用
m.start();//配合find,匹配成功的起始位置
m.end();//配合find,匹配成功的最后位置
//...

    日期

java.util.Date
 \- java.sql.Date [专门针对数据库的数据类型]
Date的构造
 public Date();
 public Date(long millis);

    注:在计算机中日期是使用一个长整型来表示的,它规定从1970年1月1日午夜开始到现在所经过的毫秒数。通过System.currentTimeMillils()方法来获取这个值。利用这个值可以来构建一个Date实例。

    构建Date实例

    如:

Date now = new Date(); //
//2个小时前
Date now2 = new Date(
 System.currentTimeMillils()-2*60*60*1000);

    构建一个2008-8-8号?怎么办?这就需要利用下面的Calendar类。

java.util.Calendar
 \- java.util.GregorianCalendar
//Code
Calendar cal = new GregiroanCalendar();
//但是不推荐这么做,因为使用了具体的子类,而应该:
Calendar cal = Calendar.getInstance();

//得到了日历类,就可以对它进行操作
//1. 可以修改时间 [通过长整型修改或通过修改年、月、日]
cal.set(Calendar.YEAR,2008);
cal.set(Calendar.MONTH,7);
cal.set(Calendar.DAY_OF_MONTH,12)

//2. 可以获取时间
Date now = cal.getTime();

//3.获取单个值 
int year = cal.get(Calendar.YEAR);
..
int month = cal.get(Calendar.MONTH);

int week = cal.get(Calendar.DAY_OF_WEEK);
//注:返回的值是1~7, 1代表周日,7代表周六

    日期的格式化

java.text.DateFormat
 \- java.text.SimpleDateFormat

    由于DateFormat中内置工厂方法的格式不符合我们的使用,所以,此处我们直接使用SimpleDateFormat。

DateFormat df = DateFormat.getInstance();
//但是:
String p = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(p);
//现在,就可以利用sdf来格式化或解析一个字符串
如:
String str = "2008-08-8";
Date d1 = sdf.parse(str);
//
Date now = new Date();
String str2 = sdf.format(now); //2017-07-20

    数字类

    数字操作

基本类型 包装类型
byte Byte
short Short
int Integer
long Long
double Double
float Float
char Character
boolean Boolean

    包装类[Wrapper],也就是针对8种基本类型而言的。

    包装类就是基本类型的对象类型,并且基本类型与对应的包装类型之间可以自动解封箱。也就是它们之间可以自动转换。如:

int i = 9;
Integer j = i;//自动封箱[auto boxing]
int k = j;//自动解箱[auto unboxing]

short s =19;
int i = s;//ok

Short s1 = new Short(19);
int i1 = s1;///ok

    字符串与数字之间的转换

String iStr = "19";
Integer i = new Integer(iStr);//ok
//然后
int ii = i.intValue();//int ii = i; //ok

//或者利用parseInt方法
int k = Integer.parseInt(iStr);

int r = 119;
//String rStr = r +"";
//
String rStr = String.valueOf(r);

    大数字类型

    java.math.BigInteger大整数java.math.BigDecimal大浮点数

    原有的数字范围所不能表达的,就需要使用大数字。如:

int i = 9;
int j = 19;
int k = i + j;

//换成大数据对象的计算:
BigInteger i = new BigInteger("9");
BigInteger j = new BigInteger("19");
BigInteger k = i.add(j);

    数字的格式化[美化数字]

    数字和字符串之间的转换。如:1358.6=>¥1,358.6以上的这个美化靠String.valueOf做不到,需要使用NumberFormat来进行。

    变量常量字面量

    变量

    变量,variable,是一种可以变化的量。语法:

数据类型 变量名 [= 初始值];   []代表可以省略
变量名,由字母、数字、_组成,并且不能以数字开头。
如:i,a,ai,haha,a5...

注:给变量命名时尽可能地有意义[见名知意]

如:定义一个变量来存储年龄
int age;//变量没有初始化
age = 10;//给变量赋值

以上两行语句也可以合在一起:
int age = 10;

//定义一个长整型变量,并初始化为100.
long a = 100L; //长整型字面量以L或l结尾

//定义一个浮点数变量
double height = 176.5;

//单精度浮点
float weight = 68.5F;//以F或f结尾

    常量

    常量[literal],是不变的变量。语法:

final 数据类型 常量名 = 初始值;
如:
int i = 100;
i = 90;//ok
final int J =  200;//常量
J = 230;//error
注:
常量名一般采用大写字母。
如:
final String MSG = "hahaha";

    字面量

    字面量[constant],“双引号括起来的”,就是字面本身的量。

只有8种基本类型以及字符串String才有字面量。
如:1,4,5,100L,true,false,'a',"abc";

作用:用来给变量或者常量赋值。

    相关知识

    了解计算机存储数据的方式

计算机存储数据的方式采用二进制【由0和1组成】
规定每8位为一个字节。
这样,1个字节所能表达的状态有:2^8=256 种

    有关字符的表达方式

    在Java中,字符使用单引号括起来,它有如下三种表达方式:A.普通表达方式,每对单引号中只能有唯一的字符

char c1 = 't';

    B.特殊字符表达式[使用转义符转义过的]

char c3 = '\t';//制表符
这类特殊字符有:
'\r' 回车
'\n' 换行
'\'' 单引号
'\\' 反斜杠
'\"' 双引号
...

    C.采用UNICODE字符表示法

语法:'\u 4位16进制表示法'
如:
char c1 = '我';
改成unicode表示法:
char c1 = '\u6211';
通过jdk提供的 native2ascii.exe命令可以把任意的中文转换成unicode字符码
ctrl + C 退出

    字符是一种特殊的整数。Java采用双字节编码,就意味着它可以表达2^16=65536个字符

字符 码值
'a' 97
'z' 122
'A' 65
'Z' 90
'0' 48
'9' 57

    在计算机中,要存储字符,都需要把字符转换成整数,进而成为二进制。这就需要字符映射表,也就是码表【字符集表】。计算机中最原始的字符集是ASCII码表,不同的码表对字符的码表是不一样的,其中,ASCII码表采用单字节编码,也就是它最多可编256个字符。

    中文字符集采用双字节编码,但是,为了向上兼容ASCII码值,前256的值与ASCII码一模一样,这样就兼容了ASCII码表。【所有主流的字符集都会无条件向上兼容ASCII码表】中文字符集:GB2312->GBK全球统一的字符集:UTF-8[支持中文],它采用动态编码技术。

    所以,当文本文件的编解码不一致时,就会产生乱码。

    类型转换

    隐式类型转换当小范围变量、字面量赋值给大范围变量时发生。如:

byte b1 = 12;
int i = b1;//ok
char c = 'a';
i = c;//ok,结果是 97

    显示类型转换【强制类型转换】当大范围变量、字面量赋值给小范围变量时发生。语法:(新类型)变量或者表达式或者字面量

int i = 97;
char c = i;//error,有可能丢失精度
char c = (char)i;//ok,做了强制类型转换

    以上就是开课吧小编为大家整理的“Java基础语法关于基本类型和对象类型”一文,更多Java教程相关内容尽在开课吧广场Java教程频道!

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营