Java:

Java 基础

Java是一门面向对象的编程语言,所谓的的面向对象是区别于面向过程来说的。

Java八大基本数据类型:

整数:

short(2个字节) int(4个字节 ) long (8个字节)

小数/浮点数:

float(4个字节) double(8个字节)

字节:

byte(1个字节,-128–127)

字符:

char(2个字节)

布尔值

boolean (1个bit)

二进制

8 (1000) 4 (0100) 2 (0010) 1 (0001)

类型转换

自动类型转换

把一个范围小的数值或变量直接赋值给另一个数据范围大的变量时,系统可进行自动类型转换。

强制类型转换

将范围大的数据向小范围数据进行转换则需要强制转换

强制语法:类型 变量名 = (要被转的类型)值;

​ eg:short a=5s;

​ int b=4;

​ b= (int)a;

运算符

算术运算符

+. -. *. /. %.(取余) ++.自加运算 --自减运算

赋值运算符

=

其他运算符可以和=结合成缩写

  1. +=:对于x+=y,表示x=x+y
  2. -=: 对于x-=y,表示x=x-y
  3. *** =: 对于x *** =y,表示x=x*y
  4. /=; %=; &=; |=; ^=; <<=; >>=; >>>=

位运算符

按位与& 按位或| 按位非~ 按位异或^(异或) <<(左移运算符) >>(右移运算符)

异或运算符有一个特点:一个数据对另一个数据异或两次,该数本身不变。

使用位运算符,必须先把数据换算成二进制,然后再参加运算。

两个整数变量的交换

  1. 第三个变量

  2. 异或

    a=a^b;

    b=a^b; abb=a

    a=a^b; aba=b

  3. 变量相加

​ a=a+b;

​ b=a-b; a+b-b=a

​ a=a-b; a-b-a=b

逻辑运算符

逻辑运算符用于操作两个布尔型的变量或常量,逻辑返回的值为Boolean类型,主要有6个。

​ & && | || ! ^

异或(^)与或(|)的不同之处是:当左右都为true时,结果为false.

三目运算符

逻辑表达式?表达式1:表达式2

&&(||)与&(|)的区别

短路,&&第一个执行错误不会执行第二个,&第一个执行错误仍执行第二个。

流程控制

if

  • 做判断

      if (条件){执行代码}
    
    else if (条件){执行代码}
    
       else {执行代码}    
    

switch

switch(字段){
        case1:
            语句体1;
            break;
    case2 :
        语句体2;
        break;
        ....
    default;
        语句体n+1;
      
   
}

循环

for

for(int i=1;i<=10;i++){
        system.out.println"  "
}

while

 int i=1
 while(i<=10){
       system.out.println"  "
         } i+=1/i++;

for循环与while循环的区别

在for循环中定义的变量出了for循环就在内存中消失,提高了内存的使用效率。

do while

先循环再判断,至少执行一次。

死循环

跳出循环

break 中断
  • break的使用场景:
    • 在选择结构switch语句中
    • 在循环语句中
  • break的作用:
    • 跳出单层循环
    • 跳出多层循环
      • 带标签的跳出
      • 格式:标签名:循环语句
continue继续
public static void main(String[] args){ 
    for(int x=0; x<10; x++) { 
        if(x == 2) { System.out.println("退出");
                    //break;
                    //continue; 
                    return
                   }
        System.out.println(x);
                   }
        System.out.println("over");
        }
return 返回

结束一个方法,返回到上层调用的地方,并可带返回值。

数组

  • 静态数组

​ 数据类型 [] 数组名= new 数据类型 [] {1,2,3…}

​ e.g int[] a= new int[] {1,2,3…};

  • 动态数组

​ 数据类型 [] 数组名= new 数据类型 []

  • 二维数组

    • 格式一

      • 数据类型**[] []**变量名=new 数据类型[m] [n];

      • m表示这个二维数组有多少个一维数组

      • n表示每一个一维数组的元素个数

      • 举例:

        • int[] [] arr= new int[3] [2];

        • 定义了一个二维数组arr

        • 这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]

        • 每个一维数组有2个元素,可以通过arr[m] [n]来获取

          表示获取第m+1个一维数组的第n+1个元素

    • 格式二

      • 数据类型**[] []**变量名=new 数据类型[m] [n];
      • m表示这个二维数组有多少个一维数组
      • 这一次没有直接给出一维数组的元素个数,可以动态的给出。
      • 举例:
        • int[] [] arr= new int [3] [];
        • arr[0] = new int [2];
        • arr [1] = new int [3];
        • arr [2] = new int [1];
    • 格式三

      • 数据类型**[] []**变量名=new 数据类型[] [] {{元素…},{元素…},{元素…}};
      • 简化版格式:
      • 数据类型[] [] 变量名 = {{元素…},{元素…},{元素…}};
      • 举例:
        • int[] [] arr = {{1,2,3},{4,5},{6}};
  • 数组中常见报错

    数组索引越界

    ArrayIndexOutOfBoundsException

    访问到了数组中的不存在的索引时发生。

    空指针异常

    NullPointerException

    数组引用没有指向实体,却在操作实体中的元素时发生。

常用类

引用类型

一般来说,我们需要用到一个类,定义的写法为:

类名 对象名 = new 类名 ();

内存分配

堆,栈,方法区

new对象

数组

Date

get

格式化

  • 日期转为string
SimpleDateFormat format= new SimpleDateFormat("yyyy/MM/dd");
           java.util.Date date =new java.util.Date();
            String aaa=format.format(date);
             System.out.println(aaa);
  • string转为date
String birth="2000/06/29";
		SimpleDateFormat format2=new SimpleDateFormat("yyyy/MM/dd");
		java.util.Date date2=format2.parse(birth);
		System.out.println(date2.getDay());

Calendar

  • Calendar calendar= Calendar.getInstance();
            System.out.println(calendar.get(Calendar.YEAR));
    
  • calendar与date的相互转换

Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
       System.out.println(date);                                 
Calendar cale = Calendar.getInstance();
          cale.setTime(date);                                                                                                 
  • 获取时间
Calendar cal = Calendar.getInstance();
// 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1  
System.out.println("年:" + cal.get(Calendar.YEAR)); 
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1)); 
//一个月的第几天
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH)); 
//一天的第几个小时
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY)); 
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));
  • 设置时间
//得到当前时间
Calendar cal = Calendar.getInstance();
//设置时间
cal.set(Calendar.Year,2018);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59); 
//输出
System.out.println(cal.getTime());
  • 增加或减少时间
//得到当前时间
Calendar cal = Calendar.getInstance();
//添加改变的值
calendar.add(Calendar.DATE, 5);
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.MONTH));

Random 随机数

Random random = new Randow();
int num = random.nextInt(10) ;

Math

  • math.e 2.7
  • math.Π 3.1415926
  • math.ceil (5.3) 向上取整 6
  • math.floor(5.9) 向下取整 5
  • math.round(5.3) 四舍五入 5

bigdecimal 精确度

double、float浮点数在进行数据基本运算时会发生数据丢失现象,这种情况不仅仅是在Java语言中,在其他语言中同样存在。

Java提供了BigDecimal类,用于处理进行基本运算发生的数据丢失问题。使用BigDecimal构造器创建对象时,建议优先用String类型对象作为参数传入进行初始化。

BigDecimal decimal = new BigDecimal("0.05");
BigDecimal decimal2 = new BigDecimal("0.01");
decimal=decimal.add(decimal2);
System.out.println(decimal);

System

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量、类方法,允许直接通过System类来调用这些Field和方法。

  • static Map<String,String> getenv():返回一个不能修改的当前系统环境的字符串映射视图。

  • static String getenv(String name):获取指定的环境变量值。

  • static Properties getProperties():确定当前的系统属性。

  • static String getProperty(String key):获取指定键指示的系统属性。

  • static long currentTimeMillis():返回以毫秒为单位的当前时间。

面试题

String s1=new String("abc"); 
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2)); 

String s3="bbb"; 
String s4="bbb"; 
System.out.println(s3==s4); 

String s5=new String("ccc"); 
String s6=new String("ccc"); 
System.out.println(s5==s6);

String s7="hello"; 
String s8="world"; 
String s9="helloworld"; System.out.println(s9==s7+s8); 
System.out.println(s9=="hello"+"world");

重点

  • 字符串如果是变量相加,先开空间,再拼接

  • 字符串如果是常量相加,先拼接,然后再常量池找,如果有就直接返回,没有再创建

StringBuffer和StringBuilder

可变字符串

二者的区别:前者是线程安全的可变字符串,后者线程不安全

常见方法

添加:

append

insert

删除:

deleteCharAt

delete

替换

replace

反转

reverse

面试

String,StringBuffer,StringBuilder的区别

String内容不可变,后两个内容可变

StringBuffer是线程同步的,数据安全,效率低;后者线程不同步,数据不安全,效率高

String,StringBuffer作为参数传递(值传递和引用传递,面向对象讲)

string

 String aa="abcdefg";
 String bb="abcdefg";
//输出第五个索引数
 System.out.println(aa.charAt(5));
//包含abc
 System.out.println(aa.contains("abc"));
//以@结尾
 System.out.println(aa.endsWith("@"));
//以" "开头
 System.out.println(aa.startsWith("@"));
//两者内容是否一样
 System.out.println(aa.equals(bb))//==判断地址是否相等
 System.out.println(aa==bb);   //输出true/false
//忽略大小写
 System.out.println(aa.equalsIgnoreCase(bb))//与char相反,输入字符,出现索引数,仅返回第一个数字位置,若没有,返回-1
 System.out.println(aa.indexOf("b"))//检查字符串是否为空
  System.out.println(aa.isEmpty())//字符串长度
 System.out.println(aa.length);
//字符间置换  把a 置换为 h
 String cc=aa.replace(a,h));
System.out.println(aa);
System.out.println(cc);
//分割字符串
String names="tom,jerry,marry";
String[] name=names.split(",");
System.out.println(name[1]);
//从哪里开始,截取字符串
String dd==aa.substring(2);/ String dd==aa.substring(26); 包前不包后
System.out.println(dd);
//把当前字符全部转小写、大写
String ee=aa.toLowerCase();
String ff=aa.toUpperCase();
//去除前后空格
String qq="    aa  123   ";
String ww=qq.trim();
System.out.println(ww);
//
int a=5;
System.out.println(a+5);    10
String s=String.valueOf(a);
System.out.println(a);      5 
System.out.println(a+5);    55

scanner

键盘输入
  • new Scanner(System.in)
  • next()获得下一个元素,不包含回车
  • next…()获得下一个指定类型,不包含回车
  • nextLine()获得下一行,包含回车
scanner = new Scanner(System.in);
	System.out.println("请输入");
		String aString=scanner.nextLine();
读取文件
  • new Scanner(File file);
  • hasNext()是否有下一行
Scanner scanner = new scanner(newFile(d:/tiku.txt));
system.out.println(scanner.hasNext());
system.out.println(scanner.nextline());

clipboard 剪切板

//将920506粘贴在剪切板上,手动直接复制。
Clipboard clipboard= Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection= new StringSelection("920506")//剪切板识别的格式
clipboard.setContents(selection,null);
//从剪切板里得到所有内容
Transferable transferable = clipboard.getContents(null);
//从内容中筛选索要的格式
String aaa = (String) transferable.getTransferData(DataFlavor.stringFlavor);

有下一行

Scanner scanner = new scanner(newFile(d:/tiku.txt));
system.out.println(scanner.hasNext());
system.out.println(scanner.nextline());

clipboard 剪切板

//将920506粘贴在剪切板上,手动直接复制。
Clipboard clipboard= Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection= new StringSelection("920506")//剪切板识别的格式
clipboard.setContents(selection,null);
//从剪切板里得到所有内容
Transferable transferable = clipboard.getContents(null);
//从内容中筛选索要的格式
String aaa = (String) transferable.getTransferData(DataFlavor.stringFlavor);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值