Java培训笔记十二(中信的Java基础归纳)

2023-11-01 18:18

本文主要是介绍Java培训笔记十二(中信的Java基础归纳),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                       JAVA基础知识总结

 

一.基本数据类型

byte  8位(一字节)     char 16位(两个字节)

short  16位(两字节)    int 32位(4个字节)

float   32位(四字节)   double 64位(8字节)

long   64位(八字节)    boolean 8位(一字节)

一共八种,作用:对基本内存空间进行划分

 

在基本数据类型用注意以下两点:

1Java中默认的浮点数是double类型的,所以在进行浮点数变量赋值的时候,一定要注意。例如:

float a; //定义了一个单精度浮点类型变量a
a=1.0
//将一个浮点数1.0赋值给a

这在java 中是不可以的。你需要这样写:

float a;
a=1.0f
//1.0为单精度再赋值给a

2. Java中的布尔值只能是true或者false。不像c语言那样可以用0表示false用其它的数表示true

二.数据类型的转换

数据类型间的转换有两钟:一种是自动类型转换;条件是:1).两种类型必须兼容;  2).目标类型的取值要大于源类型的取值。二种是强制类型转换。但容易造成精度的丢失。

java中的类型自动提升规则:

one:所有byte类型,short类型,和char类型都将自动提升为int类型

two:如果有一个操作符是long型。则计算结果就是long

three:如果有一个操作符是float型。则计算结果就是float

four    如果有一个操作符是double型。则计算结果就是doubl

                                                                 

                                                                 3.javaStringint,double数据类型之间的转换:
String转为int
String s1="abc";
int i1=Integer.parseInt(s1);

String转为double
String s1="abc";
double d1=Double.parseDouble(s1);

String先转为double,后转为int
String s1="abc";
int i2=(int)Double.parseDouble(s1);

 

class zh

{public static void main (String args [])

       {String s1="abc";

     int i1=Integer.parseInt(s1);

        System.out.println(i1);

       }

 

}//为什么编译的时候不报错了,而运行的时候会报错?

 

int类型转换不double类型是看自动进行的,而double转换不int需要强制类型转换.

 

例:

double x=0.999;

 

    int n=(int)x; //强制类型转换是通过截断小数部分转换不整型的

基本类型与其包装器类之间的转换

 

    包装器类 对象变量名=new  包装器类(基本类型变量);

 

   基本类型 基本类型变量名=对象变量名. 基本类型Value();

 

例:

 

 int i=1;

 

  Integer io=new Integer(i);

 

   int b=io.intValue();

 

   数据转换为String类型

 

    String str1=””+基本类型变量;

  

 

十进制到其他进制的转换

 

Integer.toBinaryString(int i); //十进制 转换成二进制

 

Integer.toHexString(int i); //十进制 转换成十六进制

 

Integer.toOctalString(int i); //十进制 转换成八进制

 

 

toString(int/long i, int radix)方法,可以将一个十进制数转换成任意进制的字符。

 

byte, short, floatdouble等数据类型,可以利用Integer或者LongtoBinaryString, toHexString, to OctalStringtoString方法转换成其他进制的字符串。

 

 

其它进制到十进制的转换

 

Integer.valueOf("1000", 几进制);

 

IntegerLong类的valueOf(String source, int r)方法,可以将任意进制的字符串转换成十进制数据。

 

 

字节数组与数据类型的转换

 

整型转换为字节数组,其它类型参考此例

 

1

 public static byte[] InttoByteArray(int n)

 

   {

 

       int tmp = n;

 

       byte[] b=new byte[4];

 

 b[3]=new Integer(tmp).byteValue();

 

       tmp=tmp>>8;

 

       b[2]=new Integer(tmp).byteValue();

 

       tmp=tmp>>16;

 

       b[1]=new Integer(tmp).byteValue();

 

       tmp=tmp>>24;

 

       b[0]=new Integer(tmp).byteValue();

 

       return b;

 

   }

 

 

2

 

 

public static byte[] InttoByteArray(int n)

 

{

 

   int tmp1 = n;

 

   byte[] b=new byte[4]; //整型需要4个字节存储

 

   for (int i = b.length - 1; i >=0; i--)

 

   {

 

       //int的后8位转换为byte

 

       b[i] = new Integer(tmp1).byteValue();

 

       tmp1 = tmp1 >> 8;

 

   }

 

   return b;

 

}

 

字节数组转换为整型

 

       byte[] b=new byte[4];

 

          b[0]=0;

 

          b[1]=0;

 

          b[2]=39;

 

          b[3]=16;

 

   public static int toInteger(byte[] b)

 

   {

 

       int s=0;

 

       s=b[0] * 256 * 256 * 256 + b[1] * 256 * 256 +b[2] * 256+b[3];

 

       return s;

 

   }

 

boolean类型转换为String

 

例一:Boolean b=true;

 

String str1=b.valueOf(b);

 

例二:

 

   Boolean b=new Boolean(true);

 

   String str2=b.toString();

 

 

 

 

三.变量

  对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

int
类型变量默认初始值为0
float
类型变量默认初始值为0.0f
double
类型变量默认初始值为0.0
boolean
类型变量默认初始值为false
char
类型变量默认初始值为0(ASCII)
long
类型变量默认初始值为0
所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

 有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为staticstatic 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
1.
它们仅能调用其他的static 方法。
2.
它们只能访问static数据。
它们不能以任何方式引用this super(关键字super 与继承有关)。
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:
// Demonstrate static variables
methodsand blocks.
class UseStatic {
static int a = 3;
static int b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void main(String args[]) {
meth(42);
}
}
一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 12。然后调用main()main() 调用meth() ,把值42传递给x3println ( ) 语句引用两个static变量ab,以及局部变量x
注意:在一个static 方法中引用任何实例变量都是非法的。
下面是该程序的输出:
Static block initialized.
x = 42
a = 3
b = 12
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:
classname.method( )
这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。
下面是一个例子。在main() 中,static方法callme() static 变量b在它们的类之外被访问。
class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() {
System.out.println("a = " + a);
}
}
class StaticByName {
public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);
}
}
下面是该程序的输出:
a = 42
b = 99

      

 

四.java中类,对象和引用间的关系

类:是对现实存在事物的一种抽象,一种高度的概括。
对象:是类的实例,是类中的一个个体,它具有该类的属性。
引用:当你引入一个包时,你可以引用该包内的类的对象,也就是说,引用针对的是类的对象。

定义一个类

 

class ccircle

{ int r=20;

  float d=2*r;

}

public class zh

{ public static void main (String args[])

   {   

        ccircle cir1=new ccircle();

       ccircle cir2=new ccircle();//在这个时候已经在堆中开辟了两个内存空间用

       System.out.println(cir1.r);

        /*

        *引用类的对象,基本数据类型变量名输出的是值,内存分配在栈。

          而引用类型输出的是地址,内存分配在堆。

        *

        */

        System.out.println(cir1);

        System.out.println(cir2);

   }

四.算术运算符  +  - * % (取模)    /(取商)

比较运算符  基本数据类型    引用(引用的是比较地址)  =   ==

  比较两个对象的值如 p.equals(p1)

逻辑运算符  &&   ||    ~    ?:

五.流程控制

1 顺序结构

任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行一行地执行,中间没有任何判断和跳转。

如果main方法多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。这意味着:如果没有流程控制,Java方法里的语句是一个顺序执行流,从上向下依次执行每条语句。

2 分支结构

Java提供了两种常见的分支控制结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支控制。

条件语句

if语句使用布尔表达式或布尔值作为分支条件来进行分支控制,其中if语句有如下三种形式:

第一种形式:

if ( logic expression )

{

statements...

}

第二种形式:

if (logic expression)

{

statements...

}

else

{

statements...

}

第三种形式:

if (logic expression)

{

statements...

}

else if(logic expression)

{

statements...

}

...//可以有零个或多个else if语句

else//最后的else语句也可以省略

{

statement..

}

在上面if语言的三种形式中,放在if之后的括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是truefalse。第二种情形和第三种情形是相通的,如果第三种形式中else if块不出现,则变成了第二种形式。

上面的条件语句中,if(logic expression)else if(logic expression)以及else后花括号括起来多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非运行过程中遇到returnbreakcontinue等关键字,或者遇到了异常),因此这个代码块也被称为条件执行体。例如如下程序:

 

public class TestIf

{

public static void main(String[] args)

{

int age = 30;

if (age > 20)

//只有当age > 20时,下面花括号括起来的语句块才会执行

//花括号括起来的语句是一个整体,要么一起执行,要么一起不会执行

{

System.out.println("年龄已经大于20岁了");

System.out.println("20岁以上的人应该学会承担责任...");

}

}

}

因此,如果if(logic expression)else if(logic expression)else后的语句块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须花括号来把它们定义成一个整体。下面代码完全可以正常执行:

//定义变量a ,并为其赋值

int a = 5;

if (a > 4)

//如果a>4,执行下面的执行体,只有一行代码作为代码块

System.out.println("a大于4");

else

//否则,执行下面的执行体,只有一行代码作为代码块

System.out.println("a不大于4");

通常,我们建议不要省略ifelseelse if后执行块的花括号,即使条件执行体只有一行代码,因为保留花括号会有更好的可读性,而且保留花括号会减少发生错误的可能,例如如下代码,则不可正常执行:

//定义变量b ,并为其赋值

int b = 5;

if (b > 4)

//如果b>4,执行下面的执行体,只有一行代码作为代码块

System.out.println("b大于4");

else

//否则,执行下面的执行体

b--;

//对于下面代码而言,它已经不再是条件执行体的一部分,因此总会执行

System.out.println("b不大于4");

上面代码中以粗体字标识的代码行:System.out.println("b不大于4");,将总是会执行,因为这行代码并不属于else后的条件执行体,else后的条件执行体就是b--;这行代码。

 

 

 

3 控制循环结构

Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性。为了弥补这种不足,Java提供了continuebreak来控制循环结构。除此之外,return可以结束整个方法,当然也就结束了一次循环。在某些时候,我们需要在某种条件出现时,强行终止结束循环,而不是等到循环条件为false时。此时,可以使用break来完成这个功能。break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束该循环,开始执行循环之后的代码。例如如下程序:

public class TestBreak

{

public static void main(String[] args)

{

//一个简单的for循环

for (int i = 0; i < 10 ; i++ )

{

System.out.println("i的值是" + i);

if (i == 2)

{

//执行该语句时将结束循环

break;

}

}

}

}

运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到break语句,程序跳出该循环。

break语句不仅可以结束其所在的循环,还可直接结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。

Java中的标签就是一个紧跟着英文冒号(:)的标识符。与其他语言不同的是,Java中的标签只有放在循环语句之前才有作用,例如下面代码:

public class TestBreak2

{

public static void main(String[] args)

{

//外层循环,outer作为标识符

outer:

for (int i = 0 ; i < 5 ; i++ )

{

//内层循环

for (int j = 0; j < 3 ; j++ )

{

System.out.println("i的值为:" + i + "  j的值为:" + j);

if (j == 1)

{

//跳出outer标签所标识的循环。

break outer;

}

}

}

}

}

运行上面程序,看到如下运行结果:

i的值为:0  j的值为:0

i的值为:0  j的值为:1

当程序从外层循环进入内层循环后,当j等于1时,程序遇到一个break outer;语句,这行代码将会导致结束outer标签指定的循环,不是结束break所在的循环,而是结束break循环的外层循环。所以看到上面的运行结果.

4.while结构和do  {  }   while;结构

 Int k=0;

   while (k<100)

 {Syetem.out.println(“hello”);

   k++

  }

  在本例中k是计数器。它从0开始计数到99.即它计数了100次,特点:先判断后执行

Int k=0;

 do 

 {Syetem.out.println(“hello”);

   k++

  } while (k<100)

在本例中k是计数器。它从0开始计数到100.即它计数了101,特点:先执行后判断。

这篇关于Java培训笔记十二(中信的Java基础归纳)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/324847

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python