一些很基础很细碎的东西

1 篇文章 0 订阅

1.c的输出:java的System.out.printf()也是
%2d: 使输出的int型的数值以2位的固定位宽输出。如果不足2位,则在前面补空格;如果超过2位,则按实际位数输出。
%02d:使输出的int型的数值以2位的固定位宽输出。如果不足2位,则在前面补0;如果超过2位,则按实际位数输出。
%m.nf意义:1、f表示输出的数据是浮点数;2、n表示输出的数据保留小数点后n为小数,第n+1位四舍五入,若不足n位则补0;3、m表示输出数据在终端设备上占有m个字符,并右对齐,如果实际的位数小于m时,左边用空格补足,如果实际位数大于7时,向右扩展输出。(浮点数不存在%0m.nf的用法)

-----------------------------------------------------java------------------------------------------
1.java的空指针异常:
对象的某个属性是可以为null的,打印出来就是null 同理mysql一条记录的某个属性也是可以为null的
但如果对象为null,再调用对象的属性就会报空指针异常了。如A a=null,再a.name=5;就会报空指针异常了

2.java:
两个char类型的相加时 自动转换成int型 然后相加,得到的结果也是int。
char本质上就是个8位数对应的ascii码,'a’是97 ‘b’是98,相加就是195。
char自动转int(低到高自动转化)是ascii码的int值,如果是’5’要转成5的话,得Character.getNumericValue(char)之类的方法转。
不管是char或是byte,在进行运算时,先转化为int类型!

 		char a='a';
		char b='c';
		System.out.println("a是:"+a);				//a是:a
		System.out.println("b是:"+b);				//b是:c
		
		System.out.println("a+b是:"+(a+b));			//a+b是:ac
		
		int c=a+b;
		System.out.println("c是:"+c);				//c是:196	
		char d=(char)c;
		System.out.println("d是:"+d);				//d是:Ä
		
		char e=196;
		System.out.println("e是:"+e);				//e是:Ä

两个char a、b相加变成int c,要用char输出的话,需要再char d=(char)c

3.java:
String s; char[] car;
String转char[]: s.toCharArray();
char[]转String: new String(car)
byte[]、char[]转String通常用new String();其他的类型常用String.valueOf();

4.java数组
int[] a=new int[5]; a[0]到a[3]赋值,a[4]不赋值
那么a.length仍然是开始建的5;

5 string的substring和list的sublist
substring(a,b)是从截取从a开始b取不到的字符串
substring(0,len-1)是取不到最后一个字符的
但是substring(0,len)能取到,0~len-1即整个字符串,虽然字符串的索引是不到len的。list的sublist(a,b)同理

String a="asdf";
System.out.println(a.substring(0,3));	————"asd"
System.out.println(a.substring(0,4));	————"asdf"

但是,要注意substring是返回一个新的string,并且一个string是不可更改的
而sublist是返回原来list的一个视图(view),所以对sublist所作的更改原来的list
也会变化

List<Integer> dataList = new ArrayList<Integer>(Arrays.asList(10,20,30,null));
dataList.subList(2,4).set(0,40);
System.out.println(dataList);							——10,20,40,null

6
list一项是null,接着添加数据是在null的下一项添加的

List<Integer> dataList = new ArrayList<Integer>(Arrays.asList(10,20,30,null));
dataList.add(50);
System.out.println(dataList.get(3));					——null
System.out.println(dataList.get(4));					——50

()list.addAll()如果参数是null会报空指针,如果参数的size为0(如new ArrayList不会报错

()增强for循环被迭代的东西是null的话,会空指针异常的。

List<String> list2=null;
一、
for(String item:list2){   
	System.out.println(item);
}
//java.lang.NullPointerException
二、
for(int i=0;i<list2.size();i++){
	if(list.get(i)!=null){
		System.out.println(list.get(i));
	}else{
		System.out.println("我是null");
	}
}
//在list2.size()时就java.lang.NullPointerException了

()增强for循环,如果迭代的东西不是null,只是没有元素的时候,不会进入循环,不会报空指针。只有集合/数组有元素的时候才会被迭代。

List<String> list2=new ArrayList<>();
一、
for(String item:list2){   
	System.out.println(item);
}
//不会进入循环
二、
for(int i=0;i<list2.size();i++){
	if(list.get(i)!=null){
		System.out.println(list.get(i));
	}else{
		System.out.println("我是null");
	}
}
//不会进入循环

()事实证明增强for循环,被迭代的东西里面有元素是null的时候,也是可以进去的,因为这个null也是集合/数组的元素。

List<String> list=new ArrayList<String>();
list.add("111");
list.add(null);
list.add("222");
一、
for(String item:list){
	if(item!=null){
		System.out.println(item);
	}else{
		System.out.println("我是null");
	}
}
//111
//我是null
//222
二、
for(int i=0;i<list.size();i++){
	if(list.get(i)!=null){
		System.out.println(list.get(i));
	}else{
		System.out.println("我是null");
	}
}
//111
//我是null
//222

()list没有元素长度为0时,get元素会下标越界的

List<String> list=new ArrayList<String>();
System.out.println(list.get(0));
//Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

7
以0开头是被视为是8进制
0x是16进制

int a=012;
System.out.println(a);									——10

8 java有基本数据类型自动转换和运算符 数据自动转换两种情况,详见课本

9

java里增强for循环【for(String a : arrayList)】里面可以修改数据吗?
对于普通类型, 是无效的
对于引用类型,准确的说是重新赋值无效,a是引用,修改a的值只是让a指向其他的String对象,并没有改变list中的内容。
但是如果是可变对象,可以修改自己属性的。

注意:对于普通类型和引用类型,如果能获得index下标,数组可以通过下标、list可以通过set(index,element)重新设值
但是不能迭代的时候删除元素,会报异常java.util.ConcurrentModificationException.

public static void main(String[] args) {
		List<StringBuilder> arrayList=new ArrayList<StringBuilder>();
        //存放元素
        arrayList.add(new StringBuilder("hello"));
        arrayList.add(new StringBuilder("ninghao"));
        arrayList.add(new StringBuilder("bye"));

        int index=0;
        //遍历集合
        for(StringBuilder a:arrayList){
            //输出集合对象
            System.out.println(a);
            //可变对象修改元素
            a.append("append");
            
            //删除元素
//          arrayList.remove(index); //会报错
//          arrayList.remove(a);//突然想起来,list的remove(int index),不是remove(对象)
			
            index++;
        }
        //输出集合
        System.out.println(arrayList);//输出[helloappend, ninghaoappend, byeappend]
	}
public static void main(String[] args){
        //集合
        List<String> arrayList=new ArrayList<String>();
        //存放元素
        arrayList.add("hello");
        arrayList.add("ninghao");
        arrayList.add("bye");
        //集合标量,人为获取index
        int index=0;
        //遍历集合
        for(String a:arrayList){
            //输出集合对象
            System.out.println(a);
            //修改集合对象
            arrayList.set(index, "hi");

            index++;
        }
        //输出集合
        System.out.println(arrayList);
    }
//注意:如果能获得index下标,list可以通过set(index,element)重新设值

增强for循环本质也是调用了迭代器iterator。

java里增强for循环【for(String a : arrayList)】里面可以修改数据吗?

11 sc.nextInt()是将下一个能转成int的数转成int,而不是跳过不能转成int的,直到下一个能转成int的。如果不能转成int就会报java.util.InputMismatchException

Scanner sc=new Scanner(System.in);
float a=sc.nextFloat();//如果输入的是5,显示5.0;如果输入的是abc,会报ava.util.InputMismatchException
System.out.println(a);

12 if和else if的判断条件都满足会怎么走?

int x=3;
if(x>1){
	System.out.println("x>1");
}else if(x>2){
	System.out.println("x>2");
}
//x>1

事实证明,当进入了一个if分支后,它就不会再进入其他的分支了

13
(1)当两个jar里面有同包名同名的类,如何区分调用?

今天boss提了这样一个问题:在导入的两个jar包中有两个同包同类名的类,在调用时如何区分调用的是哪个?
以前学习时我们总是被告诫尽量避免同名类出现,没怎么了解这方面的问题。boss说只要将classpath中要调用的jar路径放在前面导入即可,不太理解。
在网上查询后得知,这与JVM的加载有关:包名类名都相同,那jvm没法区分了,一般ide是会提示发生冲突而报错的,如果不报错的,那就只有第一个包被引入(在classpath路径下排在前面的包),第二个包会在classloader加载类时判断重复而忽略。

参考:两个jar里面有同包名同名的类,如何区分调用?
(2)如果引用的jar包里的类名字和路径都和项目里的类一样,怎么区分?
同事说是项目里的会被先调用,我测试了一下也是这样。
jar包里
项目里
测试
14.java中字符串+null和null+null的结果
字符串+null:结果是在字符串后再加上null字符串。因为采用字符串加上其它类型的参数时如过其它参数不是字符串类型,会被强制转换成字符串。
null+null:结果是nullnull,都是字符串的形式

String a="as"+null; //asnull

String str1=null;        
String str2=null;        
String str3=str1+str2; //nullnull

参考:https://blog.csdn.net/u012060033/article/details/82792904

------------------------------------------------linux-------------------------------------------------
1.Linux文件权限一共10位长度(例如drwxrwxrwx),分成四段,分别代表文件类型、拥有者(u)、组的成员(g)、其他人(o)对于这个文件的权限
顺便一提,所有人是(a)
r:可读(对应数字4) w:可写(2) x:可执行(1) 7=4+2+1
drwxr-xr-- ——》754
所以改变权限有两种方式:
字母:chmod a+x g+w file
数字:chmod 764 file
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值