首页 > 编程语言 >JAVA SE

JAVA SE

时间:2024-06-05 11:30:21浏览次数:25  
标签:语句 JAVA int SE 数组 java 排序 表达式

JAVA SE

第一章-java的简介

1、java是什么?

 一种编程语言
高级编程语言:c/c++,java,php,javaScript,python...
因为计算机只能认识二进数,不能识别高级语言,所以所有的高级语言都需要转变为机器语言
  
高级编程语言分为二种:
       编译型语言(c/c++):
           需要先将源代码进行编译,转换为特定的可执行文件(平台能直接执行的二进制文件)
           优点:编译一次,永久执行,当你发布可执行文件给客户时不需要提供源代码,
                 只需要提供一个可执行的二进制文件即可,体现的安全性
                 执行速度快
           缺点:不能跨平台      
                 
       解释型语言(javaScript,python):
           需要一个解释器,在源代码执行的时候被解释器翻译为一个与平台无关的中间代码,之后再翻译成各平台的机器语言
           特点:夸平台
           缺点:运行时需要源代码,运行速度慢

2、java的发展历程

开始研究 1990
Oak 1991.6
HotJava 1995.5
Java1.0 1995.5.23
Java1.1 1997.2.18
Java 1.2 1998.12.4
Java1.3 2000.5.8
Java1.4 2002.2.13
Java5.0 2004.9
Java6.0 2006.4
Oracle74亿美元收购sun 2009.4.20
Java7 2011.7.28
Java8 2014.3.19
Java9 2017.9.21

3、java的特征

	半编译半解释
	java会将代码编译成一个.class文件(不完全编译),再将.class文件解释称各平台能够识别的机器语言
	跨平台
	速度快
	安全
	健壮
	分布式:垂直分布式、水平分布式
	多线程
       
   [面试题]jvm是什么?jvm的运行原理?jvm的生命周期
       jvm:java虚拟机(相当于一个翻译官)
       运行原理:java编译器先将代码编译成.class,java虚拟机再将.class文件解释成各个平台能够识别的机器语言,
                 每个平台都有自己的jvm因为有不同系统版本的jdk
       生命周期:
       当遇到main时候jvm开始运行,main方法运行完成的时候jvm结束
       如果说有10个main同时执行,10java虚拟机在运行,他们互不影响

4、java语言的版本

       javaSE(java核心技术) ,javaEE(java企业级开发技术,javaWEB),javaME(小型版本)

5、安装JDK

   无论使用什么样的编程语言开发,都要安装SDK,在java中称为JDK
   JDK:JAVA开发工具包
   JRE:JAVA运行环境
   [面试题] JRE和JVM的关系
   JRE=JVM+基本的数据包+JAVA依赖包
   
   JDK目录结构:
       bin:存放可执行文件 java.exe  javac.exe
       lib:存放一些二进制文件和所依赖的包

 关键字,保留字,标识符
   关键字:java中特殊的英文单词,内部编译器自动识别
   保留字:暂定为java使用,还没有真正成为关键字,以后用不用还不确定
   标识符:包、类、方法、参数和变量的名称总称为标识符
       命名规则:
       规则:
           必须以字母、下划线(_)或美元符号($)开头;
           余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
           标识符中不能有空格;
           不能使用Java中的关键字或者保留字做为标识符;
       
   规范:    
       包:域名.公司名.项目名.种族  com.nesoft.java150219.test
       类名:驼峰命名法 /\_/\_/\  首字母一定要大写Student , HelloWorld ,Hello_world
       方法名:驼峰命名法 /\_/\_/\  首字母一般要小写 getName(),get(), set_sex()
       参数和变量名:驼峰命名法 /\_/\_/\ 首字母一般要小写 int maxAge
       常量名全部大写

  String[] args java虚拟机默认传入的字符数组参数

第二章-数据类型

一:基本数据类型

  数值型:byte, short, int, long     一个字节8位   1G=1024m 1m=1024k 1k=1024b
          byte 1字节8位   -2^7-2^7-1  -127-128
          short 2字节16 -2^15-2^15-1
          int 4字节32位  -2^31-2^31-1  java中默认的整型

          long 8字节64位 -2^63-2^63-1
          long b4=12312312;  //发生了隐式转换 12312312是int类型,自动转换long
          long b5=12312312L;  //一般声明Long类型数据时,在数据的后面加上L
          
          Java中不同进制整型的表示形式
                  十进制 第一位不是0   例:10等
                  十六进制A:10 F:15     例:0xF     运算5*16^0+4*16^1=690x45
                  八进制   例:0125     运算:5*8^0+2*8^1+1*8^2  第一位是0
                  二进制 必须以ob开头  例:0b10101001
                     
          浮点型: double,float           
                     double: 8字节 64位  -2^63-2^63-1     java中默认的浮点型
                     float: 4字节 32位  -2^31-2^31-1    float和long一样需要在变量值后加首字母

          字符型:char
                     char 是字符时只能表示单个字符
                     char c2=49;  //是整数时,是一个16位无符号整数 ,jvm会找到acsii表找到整数对应acsii值

                    转义字符:   \    ,\n代表的是回车(换行)
                                   System.out.println("你好,\"中国\"");

           布尔型: boolean  -->false true   一般用于判断比较

二、变量

变量 :临时存放数据的场所
局部变量:在方法中或则代码块中声明的变量,一定是初始化之后变量才能使用

数据类型的相互转换
   byte:1个字节 8位 -128~127
   short :2个字节 16位 (-2^15~2^15-1)
   int :4个字节 32位 (-2^31~2^31-1)
   long:8个字节 64位 (-2^63~2^63-1)
   浮点型:
   float:4个字节 32 位
   double :8个字节 64位
   注:默认的是double类型,如3.14是double类型的,加后缀F(3.14F)则为float类型的。
   char类型:
   char:2个字节。
   Boolean 类型:
   boolean: (true or false)(并未指明是多少字节  1字节  1位 4字节)

   1.隐式转换:就是把小精度的数值直接赋值给大精度数据类型,会发生隐式转换    例:  short a1=10; int a2=a1;
   2.显示转换:就是需要使用强制转换,当大精度的类型的数值要变小精度的类型数值时需要实现强制转换;但可能会导致精度缺失,发生后果自负 例:int a=10;short b=(short)a;
  3.byte、short、char之间不会相互转换,他们三者在计算时首先会转换为int类型
  4.int接收的是一个字符,jvm会去找acsii表,char接收的是一个整型是,jvm会去找acsii表

二:赋值运算符

赋值运算符: + - * /  %(求余)
1.赋值的时候从右往左计算,例将20赋给a int a=20;
2.a=a+10,可以写成a+=10; 加减乘除同理

三:算术运算符

1.++a先自增1,后运算
2.a++先运算后,后自增1

四:比较运算符

  比较运算符>、<、>=、 <=、= =、!=、instanceof
    1.比较运算符,返回boolean, if(){}的条件返回的也是boolean    boolean temp=1>2;    boolean t1=1!=2;
    2.==用于数值类型比较  比较就是两个数值是否相同,boolean t2=1==2;
    3.//instanceof 比较是否是同一个对象 用于引用类型数据
        Date d=new Date();
        Date d1=new Date();
        boolean t3=d instanceof Date;
        if(d instanceof Date) {
             System.out.println("d是日期类型,可以转为字符串类");
        }

五:逻辑运算符

 &&逻辑与,||逻辑或(),逻辑非 !
  1.&&逻辑与 表达式两边都为true才为true  表达式一&&表达式二
  2.逻辑或 || 达式一边都为true就为true  表达式一||表达式二
  3.逻辑非  对结果取反
     if(!false) {
            System.out.println("true");
       }

六:按位运算符

按位运算符byte short char int long有效
按位运算符:     &      |     ^     ~    >>     <<      >>>
1. & 按位与 & 只有参加运算的两位都为1,&运算的结果才为1,否则为0
       int i=5&2;
    /*   0101 ---5
         0010 ---2
         0000 ---0*/
2. | 按位或 | 只有参加运算的两位都为0,|运算的结果才为0,否则为1
       int j=29|5;
    /*011101  --29
      000101 --5
      011101 --29*/
3. ^ 异或 只有参加运算的两位不同,^运算的结果才为1,否则为0
       int h=29^5;
    /*0001 1101  --29
      0000 0101   --5
      0001 1000--24*/
4. << 左移 << n<<m n*2^m   符号位:0代表正数  1代表负数
       int k=5<<2;
    /*0000 0101
      0001 0100*/
5. >> 右移 >>  
       int g=5>>2;
    /*0000 0101
      0000 0001*/
6. >>>  >>>:无符号右移。无论是正数还是负数,高位通通补0

7.左移的正负数,右移是正数,都可以套用公式  n>>m n/2^m
8.注意:负数的左移右移    将原码转为补码 再移动,最后将得到的结果转为原码    反码时原码取反, 补码是反码+1;
   int num=-9<<2;
    /*1000 1001 --原码
     *1111 0110 --反码
     *1111 0111 --补码
     *
     *1111 011100 --左移结果
     *1111 011011 补码反反码
     *1000 100100 //36   原码
     */
9.正数右移左边空余部分补0  负数右移左边空余部分补1
    int num2=-9>>2;
    /*1000 1001 --原码
     *1111 0110 --反码
     *1111 0111 --补码
     *
     *1111 1101 --右移结果
     *1111 1100 补码转反码
     *1000 0011  //-3   原码
     */

七:按位运算和逻辑运算的区别

1.表达式一&&表达式二  ,表达式一&表达式二
2.按位与& 逻辑与&&的区别   :&&具有短路功能,若果表达式一为false,不执行表达式二   &不具有短路功能 表达式一和表达式二无论如何都执行
3.表达式一||表达式二  ,表达式一|表达式二
4.按位或| 逻辑或||的区别:   ||具有短路功能,若果表达式一为true,不执行表达式二   |不具有短路功能 表达式一和表达式二无论如何都执行

八:三元运算符

三元表达式:表达式1?表达式2:表达式3; 表达式1的结果为true时,就为第二个表达式,如果为false时,就为第三个表达式
从右往左计算
boolean t1=false?true:false?false:false?true:false?true:false;结果为false

九:String类

String类: 引用类型(对象类型)和基本数据类型的区别
         只要是变量的声明都放在栈区
         基本数据类型数据存在栈区
         引用类型数据类型存在堆区
new 内存空间分配符(在堆中)
1.声明变量初始化的时候就已经是在内存中创建了一个对象
2.==用于引用数据类型比较的时候,比较的时两个对象的地址
3.但内存中有对象了,就不会重新创建,例内存中已经有zhangsan了,如果再想创建String s4=new String("zhangsan"); //这样声明在内存中创了多少个对象 1个
4.若没有,String s4=new String("lisi"); //这样声明在内存中创了多少个对象 2个
5.System.out.println("y"+y); //任何数据类型和字符串拼接都会变成字符串

第三章-流程控制语句

1.if语句

if语句 :表达式为true那么执行if语句体;if(表达式){}
(1).单分支 if(表达式){}
(2).多分支
   if(表达式){
       }else if(){
           }else{}

2.Switch语句

(1).switch (表达式){
   case 取值1:
   语句块1                      
   …
   case 取值n:
   语句块n                      
   default:          
   语句块n+1  
   }
(2).case的取值一定要和switch中的表达式的数据类型一致,case值必须是常量,不能跟变量。
(3).break:跳出switch语句
(4).switch语句的结束:遇到break语句或者 如果满足条件执行语句块,但是没有遇到break语句会继续往下执行直到遇到下一个break语句为止,如果没有break语句一直执行到switch语句的最后

3.for循环

  (1).for(初始化表达式;循环条件表达式;循环后的操作表达式){
               执行语句块
        }
  (2).死循环产生的条件:没有循环终止条件
  (3).注意:死循环之后的代码都不能通过编译
   死循环有:
   for(;;){死循环1};
   for(int i=0;;){死循环2};
   for(int i=-1;i<=0;){死循环3};
   for(int i=0;;i++){死循环4}

4.while和do…while

  where(表达式){  表达式做条件判断--boolean  }
  do{}while() 无论如何都会执行一次语句块
  (1).while的死循环
       while(true) {死循环1};while(i<100) {死循环2};

5.变量的作用域

  (1).变量的作用域:变量要初始化之后才能使用;
       在同一个作用域范围内,变量不能重新被定义;
  (2).若变量在main方法声明,则在if或者其它语句中,不可重复声明;
       若变量在if或者其它语句中声明,则只能在其语句中可使用,离开此语句不能使用;

6.控制台输入和随机数

  (1).控制台输入:Scanner sc=new Scanner(System.in);//需要scanner包
       sc.next();//读取一个字符串,以空格结束
       sc.nextInt();//读取整数
       sc.Double();//浮点型
       sc.nextLine();// 读取控制台输入的一整行字符串数据
  (2).随机数:Randow r=new Random();
       r.nextInt(10)//表示随机获取0-9的数
       r.nextInt(10)+1//表示1-10的数

7.循环嵌套和循环中断

//  (1)循环嵌套:九九乘法表
 for(int i=1;i<=9;i++) {
   //行数
               for(int j=1;j<=i;j++) {
   //列数
                      System.out.print(j+"x"+i+"="+j*i+" ");
                }
               System.out.println();
           }

(2).循环中断(break,continue)

for(int i=1;i<=9;i++) {
   //行数
               if(i==5){
   break;}//跳出整个循环
               for(int j=1;j<=i;j++) {
   //列数
                      System.out.print(j+"x"+i+"="+j*i+" ");
                }
               System.out.println();
           }

for(int i=1;i<=9;i++) {
   //行数
               if(i==5){
   continue;}//跳出整个循环
               for(int j=1;j<=i;j++) {
   //列数
                      System.out.print(j+"x"+i+"="+j*i+" ");
                }
               System.out.println();
           }

  outer:for(int i=1;i<=9;i++) {
   //行数
                   inner:for(int j=1;j<=i;j++) {
   //列数
                       if(i==5){
   
                           break outer;    
                       }
                          System.out.print(j+"x"+i+"="+j*i+" ");
                    }
                   System.out.println();
               }

二:数组(第四章)
1.数组:int[] arr1= {元素1,元素2…} 就一个容器

(1).特点:声明什么类型的数组就只能存放什么数据类型的数据;
               数组是定长(数组长度不可变);
 (2).当声明的数组没有给定值,会有默认的值  String(引用数据类型)-->null  char-->' '  int-->0  double-->0.0
 (3).int[] arr3=new int[5]; -->初始化时必须指定数组的长度
 (4).数组的声明和创建,①int[] arr={1,2};//创建并且初始化②int arr[]={1,2};③int[] arr=new int[5];//创建数组且长度为5;默认值为0;④int[] arr=new in[]{1,2,3}
(5).声明一个int类型的数组  那么只能存放int类型数据
int[] arr1= {'a',2,3,4,5,5,5,123}; //发生char->int
 (6).若给数组单独赋值,则不能超过数组函数长度,超过则出现数组越界异常
 (7).通过Arrays类中的toString方法打印输出数组
     System.out.println(Arrays.toString(arr));

2.数组内存分析

     数组中的数据存放在堆内存,其引用在栈内存
     int[] arr2= {}; //这样声明数组,数组没有长度,没有在对内存中创建数组对象

3.数组的访问

  使用for循环访问数组  数组索引的最大值是数组长度-1(arr.length-1)

4.加强for循环 foreach 一般用于数组对象或者集合的遍历

String[] student={"a","b","c"};
    for(String s:student) {
        System.out.println(s);
    }

5.二维数组

  (1).创建方式①int a[行][列];int[][] b;int[] c [];
  (2).快速访问
  for(int row=0;row<f.length;row++) {
               for(int colum=0;colum<f[row].length;colum++) {
                   System.out.print(f[row][colum]);
               }
               System.out.println();
          }

第四章-数组

一:数组的操作

*什么是时间复杂度?
	平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。
	线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;
	O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序
	线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。
	
关于稳定性
	稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。
	不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。
	
名词解释:
n:数据规模
k:"桶"的个数
In-place:占用常数内存,不占用额外内存
Out-place:占用额外内存

稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同

1.数组的拷贝 System.arraycopy(src, srcPos, dest, destPos, length);

         src源数组,srcPos开始复 制索引,dest目标数组,destPos开始粘贴索引,长度
  System类中的数组拷贝方法对数组进行更新

2.数组的排序

3.冒泡排序

//arr.length-1和arr.length-j-1的区别,
//arr.length-1就是每一个都要排序,无论是排过序的还要重新对比
//arr.length-j-1,不用重新排已经排好序的数据,提高了排序的效率
课后作业:

4.选择排序

在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

5.插入排序

基本思想: 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。
如此反复循环,直到全部排好顺序。

6.快速排序

基本思想:(分治)
先从数列中取出一个数作为key值;
将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
对左右两个小数列重复第二步,直至各区间只有1个数。

7.归并排序

基本思想:
归并排序是建立在归并操作上的一种有效的排序

标签:语句,JAVA,int,SE,数组,java,排序,表达式
From: https://blog.csdn.net/qq_48916660/article/details/139464100

相关文章

  • mvn 运行java 应用
    一般我们可能都是使用的idea工具,但是有时ide工具可能不那么方便,可能就需要直接使用基于mavenexec插件的,以下是一个使用的简单说明exec插件参考配置项目结构直接运行mvncompileexec:java-Dexec.mainClass="com.dalong.App"配置插件......
  • Java代码优化指南
    Java代码优化指南代码优化是通过改进算法和数据结构,使代码运行得更快、更节省内存、更易于维护。在这方面,主要可以从算法优化、数据结构优化和代码层面的优化入手。本文将详细介绍这些优化方法,并通过具体示例说明如何在Java中进行代码优化。一、算法优化选择合适的算法......
  • ByteBase安装使用
    1.准备工作mkdir-p/home/bizuser/soft/bytebase/data2.镜像下载dockerpullbytebase/bytebase3.容器启动启动一:dockerrun--init\--namebytebase-test\--publish8080:8080--pullalways\--volume/home/bizuser/soft/bytebase/data:/var/opt/byteba......
  • 计算机毕业设计项目推荐,28259校园信息交流平台的设计与实现(开题答辩+程序定制+全套文
    摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园信息交流平台被用户普遍使用,为方便用户能够可以随时进行校园信息交流平台的数据信息管理,特开发了基于校园信息交流......
  • 计算机毕业设计项目推荐,28326 校园商店管理系统的设计与实现(开题答辩+程序定制+全套文
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,校园商店当然也不能排除在外。校园商店是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统......
  • Linux上的SQL Server使用bcp实用工具将数据批量复制到数据库表中
    Linux上的SQLServer使用bcp实用工具将数据批量复制到数据库表中。参考官方文档如下https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-bcp?view=sql-server-ver161、本文内容安装SQLServer命令行工具使用bcp导入数据使用bcp导出数据相关内......
  • (免费领源码)Java/Mysql数据库+04770 基于Java的书籍借阅管理系统设计与实现,计算机毕业
    摘 要随着科学技术的告诉发展,我们已经步入数字化、网络化的时代。图书馆是学校的文献信息中心,是为全校教学和科学研究服务的学术性机构,是学校信息化的重要基地。图书馆的工作是学校和科学研究工作的重要组成部分,是全校师生学习和研究的重要场所。为了提高图书馆的工作效率......
  • (免费领源码)Java/Mysql数据库+04827基于PHP的高校二手物品交易系统的设计与实现,计算机
    本科生毕业论文(设计) 题   目PHP高校二手物品交易系统学   院       XXXXX     专业班级   XXXXX学生姓名       XXXX    指导教师            XXXX          撰写日期:2022年5月10日目 录摘......
  • 巧用CMake编译策略:C++二次开发中的Release与Debug模式切换秘籍
    往期本博主的C++精讲优质博文可通过这篇导航进行查找:《Lemo的C++精华博文导航:进阶、精讲、设计模式文章全收录》前言在C++二次开发的过程中,理解各种编译模式并能灵活切换,对于提升软件性能和调试效率至关重要。本文将深入讨论Debug与Release模式的区别、默认编......