Java学习01

前言、Java介绍与运行

1、Java特点

(1)面向对象:

区别于面向过程,以类(class)为基础,类中包含属性与调整属性的方法(method),java是强面向对象的,每个程序都是基于类的结构。

(2)包机制(package)

一组相互联系的类型(类、接口、枚举和注释),对这些类型提供访问保护和命名空间管理的功能。常用的包包括:

  • java.applet:实现运行于Internet浏览器中的JAVA APPLET的工具类库。
  • java.awt:用来构建图形用户界面(GUI)的类库,包括图形类、组成类、容器类、排列类、几何类、事件类和工具类等。
  • java.io:提供了一系列用来读写文件或其他的输入输出流。
  • java.lang:最重要,提供了JAVA语言的核心类库,包含了运行JAVA程序必不可少的系统类,如:基本数据类型、基本数学函数、字符串处理、线程管理和异常处理类等。运行JAVA程序时,系统会自动加载java.lang包,这个包的加载是默认的
  • java.math:数学方面操作的类
  • java.net:包含一些与网络相关的类和接口,如主机名解析类、实现套接字通信的Socket类和ServerSocket类、资源定位器(URL)类等
  • java.sql:提供了对数据库进行操作的类
  • java.time包是在JDK8新引入的,提供了用于日期、时间、实例和周期的主要类
  • java.util提供了一些实用工具,如数据结构类、日期类、随机数类、属性类、观测类和异常类等
    (https://blog.csdn.net/qq_36119192/article/details/85066064)
    在项目中,利用maven完成各种包的管理

(3)支持分布式、多线程

  • java是分布式语言,可以用于网络编程与分布式架构的客户机与服务器。
  • java是多线程语言,它提供支持多线程的执行,如java.lang中的Thread类。

(4)存储分配模型

java没有指针,无法通过指针指向存储器,编译程序不处理存储安排,在运行时由Java解释程序决定实际存储地址。try/catch/finally用于异常处理。

(5)编译与运行

javac程序实现编译,可以基于hello.java生成hello.class文件,java实现解释与执行。

  • 第一个程序 HelloWorld
// 第一行的第三个单词必须和所在的文件名称完全一样,大小写也要一样
// public class 后面代表定义一个类的名称,类是java当中所有源代码的基本组织单位
public class HelloWorld { 
    // 第二行的内容是万年不变的固定写法,代表main方法
    // 第一行代表程序执行的起点
    public static void main(String[] args) {
        // 第三行代表打印输出语句(其实就是屏幕显示)
        // 希望显示什么东西,就在小括号里面写什么
        System.out.println("Hello,World!!!");
    }
}

注意:HelloWorld.java中的文件名要与public class后面类名称的一样。

(6)Java开发环境搭建

JVM:翻译程序成对应系统的语言
JRE:运行时的环境
JDK:java程序开发工具包

(7)Java开发工具

首选 IntelliJ IDEA 搭配maven包管理工具,vscode备选。

一、数据类型、变量与常量

1、关键字

java自带的保留字,不能用于常量、变量、和任何标识符的名称,比如public、import、byte、int等java自带的。关键字完全小写,且在在Notepad++等编辑器中显示为特殊颜色。

2、标识符

(1)命名规则:硬性要求

  • 标识符可以包含英文字母26个(区分大小写)0-9数字$(美元符号)和 _(下划线)
  • 标识符不能以数字开头
  • 标识符不能是关键字

(2)命名规范:软性建议

  • 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式) HelloWorld
  • 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式) a
  • 方法名规范:同变量名 updata()

3、常用数据类型

(1)整数型:byte short int long

  • 如100、200
  • byte范围为-2^7 到 2^7-1 即-128~127
  • short范围为-2^15 到 2^15-1 即-32768~32767
  • 整数默认int型,long类型需要加后缀L

(2)浮点型:loat和double

  • 有小数点,如2.5
  • 浮点型可能只是一个近似值,并非精确的值
  • 浮点数默认类型是double,如果一定要使用float类型,需要加上一个后缀F
  • float是单精度、32位,double双精度、64 位
  • 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节, long是8字节

(3)字符型:char

  • 如‘a’、‘中’
  • 16 位 Unicode 字符,最小值\u0000 -> 0(十进制),最大值是 \uffff -> 65535

(4)布尔型:boolen

  • true 、false,默认false

(5)引用数据类型:字符串、数组、类、接口、Lambda

4、常量

以下是常量的例子

public class Demo01Const {
    public static void main(String[] args) {
        // 字符串常量
        System.out.println("ABC");
        System.out.println("");// ""之间没东西,这样表示空值
        System.out.println("XYZ");
        
        // 整数常量
        System.out.println(30);
        System.out.println(-500);
        
        // 浮点数
        System.out.println(3.14);
        System.out.println(-2.5);
        
        // 字符常量
        System.out.println('A');
        System.out.println('6');
        // System.out.println('') //''之间不能没有字符,要不然报错,为空值
        // System.out.println('AB') //''之间不能没有字符,要不然报错,为空值
        
        // 布尔常量
        System.out.println(true);
        System.out.println(false);
        
        // 空常量不能直接打印
        // System.out.println(null);
    }
}

(1)字面量:通常赋值给变量,运行期间不能改变

整数型常量可以用十进制、16进制以及8进制表示:

  • 100:十进制
  • 0111:8进制,前缀为0
  • 0x86:16进制,前缀0x

字符串常量和字符常量可以包含任何Unicode字符

  • 字符 '\u0001'
  • 字符串 "\u0001"

(2)final关键字:

对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。

final double PI = 3.1415927;
final double YEAR = 2021;

5、枚举类型

枚举为一个可能取值的集合,可以为null

enum City {Chenggdu, Chongqing, Hangzhou};
# 城市集合
City c = City.Chenggdu;

6、变量

变量是程序运行期间,内容可以发生改变的量。

(1)创建一个变量并且使用的格式

数据类型  变量名称;   //    创建了一个变量
变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量

或者

数据类型 变量名称 = 数据值; //在创建一个变量的同时,立刻放入指定的数据值

以下是案例:

public class Demo02Variable{
    public static void main(String[] args){
        int num1;
        num1=10;
        System.out.println(num1);
        num1=20;
        System.out.println(num1);
        int num2=25;
        System.out.println(num2);
        num2=35;
        System.out.println(num2);
        System.out.println("***************");
        
        byte num3=30;//如果为400,则会超范围
        System.out.println(num3);
        
        short num5=50;
        System.out.println(num5);
        
        long num6=30000000L;
        System.out.println(num6);
        
        float num7=2.5F;
        System.out.println(num7);
        
        double num8=1.2;
        System.out.println(num8);
        
        char zifu1='A';
        System.out.println(zifu1);
        
        zifu1='中';
        System.out.println(zifu1);
        
        boolean var1=true;
        System.out.println(var1);
        
        var1=false;
        System.out.println(var1);
        
        boolean var2=var1;
        System.out.println(var2);
    }
}

注意事项:

  • 如果创建多个变量,那么变量之间的名称不可以重复
  • 对于float和1ong类型来说,字母后缀F和L不要丢掉
  • 使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围
  • 沒有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。

(2)变量类别

public class type{
    static int all_var;    // 类变量
    int a=1;  // 实例变量 
    public void test(){
        int local_var =0;  // 局部变量 
    }
}
  • 类变量,带static修饰,属于类,所有实例共享同一个类变量
  • 实例变量,每一个类的实例都有只属于自己的那一份
  • 局部变量,方法内的变量

(3)数据类型转换

1)自动类型转换(隐式)

自动完成,为了不产生精度丢失,规则为数据范围从小到大,如int 到long

public class Demo01DataType {
    public static void main(String[] args){
        System.out.println(1024);//整数,默认int类型
        System.out.println(3.14);//浮点数,默认double
        
        long num1=100;
        System.out.println(num1);//100
        
        double num2=2.5F;//2.5
        System.out.println(num2);
        
        float num3=30L;//30.0
        System.out.println(num3);
    }
}

以下是精度丢失的案例:

int n = 123456789;
float f = n;
System.out.println(f);//1.23456792E8
2)强制类型转换(显式)

需要特殊格式处理,不能自动处理,格式为

范围小的类型 范围小的变量名 =(范围小的类型)原本范围大的数据

不推荐使用 易造成精度损失、数据溢出
案例1:数据溢出


数据溢出 int无法显示6000000000

案例2:精度损失

double x = 9.997;
int nx = (int)x; //nx为9
// int nx = (int) Math.round(x); //nx为10

强制转换通过截断小数部分将浮点值转换为整型,Math.round()方相当于四舍五入,寻找最接近的整数。

3)byte/short/char之间的运算

byte/short/char运算时首选变为int类型,然后再计算,字符会被翻译成二进制。

案例1:char 与 int

char zifu1 ='A';
System.out.printin (zifu1+1); //结果为66

案例2:byte/short/char之间的运算

        byte num4=40;
        byte num5=50;
        int result1=num4+num5;//byte+byte-->int+int-->int
        System.out.println(result1);//90
        
        short num6=60;
        short result2 =(short)(num4+num6);
        System.out.println(result2);//100

注意:boolean类型不能转化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容