java语言基础

大家好啦 这是小潘写的第二篇博客啦。 接着上一篇java前言的。 还是继续说的是java的基础 知识,小白也可以看懂哒

上次说到Java语言的架构

java语言有三种架构 分别是JAVAEE, JAVASE,JAVAME

分别是企业版------帮助开发可移植,健壮的服务端的应用程序,是在javaSE的基础之上的,提供Web服务,组件模型,管理和通信API

标准版-----------开发部署桌面,服务器,嵌入式的Java应用程序

小型版-------开发移动设备和嵌入式的设备

J2EE(Java 2 Platform Enterprise Edition)企业版
可帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。
J2SE(Java 2 Platform Standard Edition)标准版
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序,能为Java EE提供开发基础。比如Java版的扫雷。
J2ME(Java 2 Platform Micro Edition)小型版
用来开发移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)。现在使用的越少用了,Android会逐渐的取代J2ME的市场份额。
Java5.0版本后,更名为 JAVAEE JAVASE JAVAME

下面说一下Java的跨平台?

跨平台本身是:同一个软件在不同的操作系统上面可以运行 也就是Java里面所说的一次编译,到处运行

跨平台的原理是因为我们有jvm java的虚拟机,相当于来说是给我们搭建了一个平台, 由jvm负责java程序在该系统中的运行,

因为有了jvm, 同一个程序在三个不同的操作系统上都是可以执行的,实现了java程序的跨平台性.(相当与说

自己给自己准备了一个java平台)

需要理解的一句话就是:java语言是跨平台的,但是jvm不是跨平台的

下面介绍JDK,JVM,JRE

JDK:(java development kit) JDK=JRE+JAVA开发工具包

JVM:(java virtual machine ) Java虚拟机 JVM= JRE+java核心类库

JRE: (java runtime environment ) java运行环境

扩展知识:JRE的bin目录里的就是JVM,lib中则是JVM工作所需要的类库

下面介绍配置环境变量

  1. (右键)此电脑–>高级系统设置–>环境变量
  2. 编辑path环境变量,在变量值开始处加上java工具所在目录,后面用 “ ; ”和其他值分隔开即可。
  3. 打开DOS命令行,任意目录下敲入javac
  4. 如果出现javac的参数信息,配置成功。 配置成功的是环境变量

为什么要配置?下次使用的话直接就会到环境变量里面去找 任何环境下都可以直接运行。

导致对path变量值的误操作, 可以通过以下技巧完成

新创建一个环境变量 JAVA_HOME 记录住jdk的目录。在path中通过%%动态的获取JAVA_HOME的值即可。

JAVA_HOME=D:\Java\jdk1.8 你的jdk的目录

path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 中间的;是不能省略的奥

%path%:动态获取path环境变量的值。

%JAVA_HOME%:动态获取名称为JAVA_HOME环境变量的值。

Java程序的编写分为三个步骤:①.编写源文件【.java】、②.编译成字节码文件【.class】、③.`执行.class文件

在你使用记事本的时候,一定要注意扩展名改为了 .java 想要运行我们的记事本写的java文件的话,打开我们的命令行, 进行盘符的切换,进入到你的bin目录下,使用javac 执行的文件名.java

没有错误的话,这时就已经生成好了字节码文件, 使用java 文件名 就可以了

下面介绍Scanner 类

Scanner 类,可以使我们的用户输入,实现计算机与用户的交互

使用的步骤

(1)导包: import java.util.Scanner;

(2)给出控制台阻塞: Scanner scanner=new Scanner(System.in);

(3)接收用户的输入: int String double 等等

int a=scanner.nextInt();

可以读取的数据类型有: int ,long ,byte,float,short,double

接收字符串的两种方式:String s=scanner.next(); String s=scanner.nextLine();

总结了几个小的知识点:

(1)Java语言拼写上严格区分大小写;

(2)一个java源文件当中是可以有多个java类的,但是只能有一个类被定义为public 类

(3)源文件的名必须和public 类的名字同名

(4)一个源文件有几个类,就会有几个字节码文件,每一个字节码文件和对应 的类名一样

加油加油奥,下面还有一些知识,当我们静下心来学习的时候,就已经算小半成功了

(4)main方法是程序执行的入口 被我们的虚拟机调用

写法是:public static void main(String[]args){

}

main方法是静态的,没有返回值类型的,它被我们的虚拟机进行调用, 有没有返回值类型没有意义

参数列表里面是一个字符串的数组

关于注释的

注释:是用来解释说明程序的文字 ,提高了我们代码的阅读性

注释有:单行注释: // 单行注释和多行注释我们的编译器是不理睬的

​ 多行注释 /* */ 单行注释和多行注释只是方便阅读

​ 文档注释 /** */

在/** */之间的所有字符会被编译器忽略,java特有的(用于生成文档);

注意:多行和文档注释都不能嵌套使用

对于单行多行注释,被注释的文字不会被JVM(java虚拟机)解释执行。对于文档注释,是Java特有的注释,其中注释内容可以被JDK提供的工具 javadoc解析生成一套以网页文件形式体现的该程序的说明文档

注释是一个程序员必须要具有的良好编程习惯。初学者编写程序可以养成习惯:先写注释再写代码。将自己的思想通过注释先整理出来,再用代码去体现

说一下我们java当中的关键字

定义数据类型:class、interface、byte、short、int、long、float、double、char、boolean、void

数据类型的值: true、false、null

流程控制:if、else、switch、case、default、while、do、forbreak、continue、return

权限修饰符:private、protected、public、

类、函数、变量修饰符:abstract、final、static、 synchronized

类之间关系:extends、implements

异常处理:try、catch、finally、throw、throws

包 package、import

其他修饰 native(执行本地c)、strictfp(类、接口或方法上 约束表达式)、 transient(对象上不会被序列化) 、volatile(弱同步)、assert(断言)

其他修饰的可以不管,看看就好了 。

关于标识符:

可简单理解为在Java程序中为了增强阅读性自定义的名称。比如:类名方法名变量名等。

标识符组成:

  1. 标识符标识符是有字母,数字,下划线,组成的,不能由数字开头,再不能使用其他的组成
  2. 标识符大小写敏感的;
  3. `标识符 不得使用java中的关键字和保留字;
  4. 别用Java API里面的类名作为自己的类名 那样的话虚拟机就会混;

注意:在起名字的时,只要标识符不是关键字就可以了,但为了提高阅读性,经常用有意义的英文单词作为标识符。

标识符书写规范: 这个是软要求,建议是这样

  • 包名:多单词组成时所有字母都小写。xxxyyyzzz

  • 类名接口名:多单词组成时,所有单词的首字母大写。XxxYyyZzz 简明知意

  • 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。xxxYyyZzz 使用的是驼峰命名法

  • 常量名:常量就是不可变的,final修饰的 所有字母都大写。多单词时每个单词用下划线连接。XXX_YYY_ZZZ

    二进制,八进制 ,十进制,十六进制的转换

       //2进制转10进制
    

    public static void main(String args[]) {
    Scanner input = new Scanner(System.in);
    System.out.print("输入一个二进制数 ");
    int binaryNumber = input.nextInt();//二进制数
    int decimal = 0;// 十进制数字
    int p = 0;// 位数
    while (true) {
    if (binaryNumber == 0) {
    break;
    } else {
    //把输入的二进制数 取它的每一位
    int temp = binaryNumber % 10;
    //从前面开始取余 刚好符合2进制数字转十进制数字
    decimal += temp * Math.pow(2, p);
    binaryNumber = binaryNumber / 10;
    p++;
    }
    }
    System.out.println(“十进制数为:”+decimal);
    }

    //10转2
    
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("输入一个十进制数 ");
    int n = input.nextInt();
    String str = "";
    while (n != 0) {
    //10进制转为二进制的话   除2取余数最后倒着写
    //字符串的拼接就仿写了倒着写的过程
    	str = n % 2 + str;
        n = n / 2;
    }
    System.out.println(str);
    

    java中的变量

    变量:表示的是内存当中的一块存储区域 不断地来存放同一类型地常量数据

    定义的格式: 数据类型 变量名=初始化值; (格式固定的)

    =号是赋值符号 ==判断的是否相等

    int a=10; 声明了一个int类型变量名为a,它的初始值是10

    int b; 光声明了但是没有进行初始化。

    变量的命名表示的是; 在内存中的一个存储区域,这时必须给这个区域起个名字 ,才能使用。

    起变量名的时候要尽可能地见名知意。

    例如:String name ;使用name表示这个空间名字,即说明这个空间存放的姓名。

变量在使用时,必须先给变量空间存放数据,即初始化。同时变量也有自己的生命周期作用域问题)。

常量池的值有就直接用,没有就创建,注意常量池基础数据很多,开发时不考虑它的大小和多少,以及内存优化问题。

下面我们说的是Java中的数据类型 。

数据类型有基础的数据类型和引用的数据类型,

基本的数据类型有数值型,字符型(char),布尔型(boolean)

数值型分为:整数类型(byte ,short,int long )浮点类型(float ,double)

引用数据类型:类(class) 接口(interface) 数组([]) String

整数的话,一般默认的是int类型的数字,浮点数的话,默认的是double类型的

如果你想使用long类型的整数的话,long we=1234455L(大小写L都是可以 推荐使用大写)

如果你想使用float 单精度的浮点数的话 float f=12.34f;

1、布尔类型 boolean

boolean类型通常用于逻辑运算和程序流程控制

boolean 类型数据只允许取值truefalse(不可以使用0 或非0的整数来代替truefalse,区分于C语言)。

boolean flag;
flag = true;
System.out.println("flag"+ flag);

2、char类型

char用来存储通常意义上的字符,char占两个字节;范围是==[0,65535],前256 (2^16)==个表示 特殊字符 ,通常用单引号包裹''。char类型也是可以表示汉字的

例如:char c = ‘A’; char c2 = ‘传’; char c3=97;

java字符采用Unicode编码,可用十六进制编码形式表示。 char c1 = ‘\u0061’;//a

3、转义字符

有些符号在Java语言中有独特意义,当需要使用原本意义的时候需要,转义表示。例如:键盘上的制表符tab键。可以使用 ‘\t’表示。如双引号,在Java中使用双引号表示字符串,若想使用双引号本身含义,即可使用’\”’表示。

4、字符编码表(ASCII)

字符编码表(ASCII):一张存放所有字符与整数的对应关系的表。整数可以通过这样的形式存储了。(计算机只识别二进制)。A 65 啊 97

例如:‘A’-----> 65

‘B’----->66

‘a’------>97

‘b’------>98

所以当把一个整形赋值给char的时候,计算机会查询整数对应的字符,将这个字符存在char空间里。例如:char ch = 65;其实是将A存放在ch中。

5、String类型

String不属于基本数据类型;但和字符有一定的联系。String是一个类(java语言里的最小单元),表示字符串;就是一串字符,字符串用""包裹起来,连接字符用+

String str1 = "这是一个字符串";
String str2 = "这是一个字符串";
String str3 = new String("这是一个字符串");
String str4 = new String("这是一个字符串");

String的equals方法源码分析(这个看不懂的话,也没有关系,在之后还会详细的说明一次 )

需要记得的是String类程序了Object类(根类)的equals()方法

一个类,你没有父类的话,就会给你一个默认的父类,就是Object类

你有父类的话,就按照你的父类 Object是所有类的根类

public boolean equals(Object anObject) {
	if (this == anObject) {// 地址
    	return true;// 地址一样本身就是一个东西
    }
    if (anObject instanceof String) {// 类型是否一致
		String anotherString = (String)anObject;// 强制转化
        int n = value.length;// 当前对象子串的长度
        if (n == anotherString.value.length) {// 目标子串的长度
        	char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {// 循环比较字符串的每一位
            	if (v1[i] != v2[i])
                	return false;// 不一样就返回false
            	i++;
            }
                return true;// 每一位都一样 返回true
        }
	}
	return false;// 类型不同也是错的
}

6、整数类型

整型数据根据数据范围不同,需要使用不同的关键字来表示。

byte、short、int、long这四个关键字都可以在内存中开辟存放整型数据的空间

byte(1个字节) short(两个字节) int(四个字节) long(8个字节 )

JAVA语言整形的四种表现形式

二进制整数,以0b或0B开头,如:int a = 0B110;(不要超过范围)

十进制整数,如:int a = 17;

八进制整数,要求以0开头,如 int a = 012;

十六进制整数,要求0X或0x开头,如int a = 0x12;

浮点类型(float、double)

float:单精度浮点数 4个字节 double :8个字节

Java浮点类型常量有两种表示方式:

  • 十进制形式: 例如:3.14 ,168.0, .618
  • 科学计数法形式: 例如:3.14e2, 3.14E2, 1000E-2

Java浮点型常量默认是double,则要声明一个常量为float型,则需在常量后加上f 或 F,

如:double pi = 3.14;//正确

float pi = 3.14F;//必须加上f,或转型 float pi3 = (float)3.14;

注意:Java里只有浮点型的变量才可以接受科学计算式结果:

int num = 314E2; //错误;num为int类型,不可以使用科学计数法

java数据存储区域简述

  1. 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
  2. :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。)
  3. :存放所有new出来的对象。
  4. 静态域:存放静态成员(static定义的)
  5. 常量池:存放字符串常量和基本类型常量(public static final)
  6. 非RAM存储:硬盘等永久存储空间

栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。

对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

垃圾回收站(GC):会检查托管中是否有应用程序不再使用的任何对象。如果有,他们的内存就可以回收。

1.垃圾回收器开始执行时,垃圾回收器沿着线程栈上行以检查所有根(然后遍历所有类型对象上的所有根),如果发现一个根引用了一个对象,就在对象的“同步块索引字段”上开启一个位(对象就是这样标记的),如果对象里又引用有其他对象,则会遍历所有对象以标识。检查好所有根之后,堆中将包含一组已标记和未标记的对象。

2.垃圾回收器线性遍历堆,以寻找未标记对象的连续内存。如果发现的内存块比较小,垃圾回收器会忽略它、们。但是,如果发现大的、可用的连续内存块,“垃圾回收器会把非垃圾的对象移动到这里以压缩堆”。 最后记得重新分配地址存根

对于基础的变量和常量:变量和引用存储在栈中,常量存储在常量池中

有一个常见的面试题?

String s = new String(“xyz”);产生几个对象?一个或两个,

如果常量池中原来没有”xyz”,就是两个对象。常量池有的话,就是一个。

数据类型的转换为:

分为隐式类型转换:小类型到大类型,会自动地进行转换

int i = 123;
long l = 6777;
l = i;

显式类型转换:大类型到小类型,需要强制进行类型转换

double d = 3.14;
float f = (float) d;

byte,short,char在参与运算的时候,会转为Int类型的数据

下面到我们的算术运算符

+,-,*,/,%,++,–

+号的作用:字符串的拼接,加号

++,–,放在前面使用的话,先增加,减少在使用

++,–放在后面使用的话,就是先使用,在进行增加,减少

赋值运算符

+=,==,-=,*=, /=,

int a=3;

a+=4;//意思就是a=a+4;

赋值运算符隐含了一个强制类型的转换

比较运算符就是>,>=,<,<=,这个

逻辑运算符:&,|,&&,||,^,!

&: 全真为真,有假则假
| :有真为真,全假都为假
&& 和|| 短路与和短路或 左边满足判断条件,右边就不执行判断了
&&: 前一个为假的话 后面的不执行
|| : 前一个为真的话 后面的不执行

^:不同为1,相同为0

!: 进行取反,真的变成假的,假的变成真的

位运算符:>>,<<,<<<,

常见的面试题 最有效率运算2乘以8,通过位移运算2<<3

左移的话: 移一位,扩大2倍,

右移一位的话,缩小2倍

无符号的右移是 不关乎符号

下面来几个常见的面试题:

交换两个数的值

// 任何一个数^一个数两次得到它本身
// 通过第三方变量的形式进行置换。
int a = 3, b = 7;
int temp = a;
a = b;
b = temp;

// 通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
a = a + b;//a = 3 + 7;
b = a - b;//b = 3 + 7 - 7; b = 3;
a = a - b;//a = 3 + 7 - 3; a = 7;

// 技巧。异或。
a = a ^ b;// a = 3 ^ 7;
b = a ^ b;// b = 3 ^ 7 ^ 7;
a = a ^ b;// a = 3 ^ 7 ^ 3;

幂运算:

使用Math.pow(a,b)来计算 a b a^b ab ,a和b是方法pow的两个未知变量。


  • /**

     - 获取当前时间,并且截取时分秒。
       */
       public class 显示时间 {
       public static void main(String[] args) {
     
     // 获取格林威治时间距今的  毫秒值
     long totalMillSeconds = System.currentTimeMillis();
     // 获取格林威治时间距今的  秒值
     long totalSeconds = totalMillSeconds / 1000;
     // 显示的秒值
     long currentSecond = totalSeconds % 60;
     // 获取格林威治时间距今的  分钟值
     long totalMinutes = totalSeconds / 60;
     // 显示的分钟值
     long currentMinute = totalMinutes % 60;
     // 获取格林威治时间距今的  小时值
     long totalHours = totalMinutes / 60;
     // 显示的小时值
     long currentHours = totalHours % 24;
     
     System.out.println("当前时间是:"+(8+currentHours)+":"+currentMinute+":"+currentSecond+" GMT");
     }
     }
    

    产生随机数的

/**

- 产生随机数
  */
  public class 产生随机数 {
  public static void main(String[] args) {

// 产生两个随机数
int number1 = (int) (Math.random() * 10);
int number2 = (int) (Math.random() * 10);
// 输出
System.out.println("number1 = " + number1);
System.out.println("number2 = " + number2);
}
}

好啦,这期的到这里就结束了

本人的知识水平有限,如果有错误或者总结不足的地方欢迎指出,大家一起学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值