java知识

1.计算机中的数据都是以二进制的补码形式存在的(掌握)

需要记住byte的范围:-128 ——127
byte 1, short 2, int 4, long 8, float 4, double 8
数据类型转换-隐式转换
byte,short,char不会相互转换,都会自动提升为int类型
char表示的ASCII表的字符


赋值运算符 +=: 内含强制转换
short s = 2;s += 3;等价于 s = (short)(s+3);
&&:短路与:如果左边为false,右边不执行
 

位运算符---就是对每位二进制进行运算
规律:a ^ b ^ b = a
发现小技巧,可以去菜鸟教程java板块验证结果,简单方便
举例:int a = 100; int b = a>50?200:100;
int b = ((a>50)?200:100);//b=200

 

switch语句

一般用于几个常量的判断,并且对于几个常量的判断switch的效率高于if

 1、Switch表示这里使用的是switch语句,后面跟的是选项

表达式类型:byte,short,int,char

JDK5以后可以是枚举,Jdk7以后可以是字符串

switch语句什么时候结束?

遇到break或者执行到switch语句的末尾

 

 基本类型:形式参数的改变对实际参数没有影响(传递的是值,存放在内存中,函数方法结束,内存释放)

 引用类型:形式参数的改变直接影响实际参数(传递的是地址)

但是,字符串是特殊的引用类型,实参传递到形参时,实际上是把传递给了形参(此时没有传递地址,s还是指向原来的地址)

public static void main(String[] args) {
               String s = "abc";
               change(s);
               System.out.println(s);//abc
          }
          public static void change(String s) {
               s += "hello";
          }

 

堆,栈,方法区

 

在静态方法中是没有this关键字,因为静态是随着类的加载而加载。而this是对象创建才存在的

 

 接口特点:

                   成员变量:只能是常量。默认修饰符:public static final

                   成员方法:只能是抽象方法。 默认修饰符:public abstract

 

 ==和equals()的区别?
          ==:
               比较基本类型:比较的是基本类型的值是否相同。
               比较引用类型:比较的是引用类型的地址值是否相同。
          equals():
               比较引用类型,默认比较的是引用类型的值是否相同。
               如果类重写了该方法,那就得按照重写后的规则进行比较。

: ""和null的区别

                 最本质的区别是否在内存中开辟内存空间,"'会开辟内存空间,而null不会,在开发的时候要养成良好的习惯用null

 

冒泡排序

就是大的气泡往后面冒。

public static void bubbleSort(int[] arr) {

              // 外循环控制比较的次数

              for (int i = 0; i < arr.length - 1; i++) {

                     // 内循环控制每次比较中,元素两两比较的过程。每次需要比较的数据是逐渐减少的。

                     for (int j = 0; j < arr.length - 1 - i; j++) {

                            // 比较相邻元素,如果前面的大,进行交换

                            if (arr[j] > arr[j + 1]) {

                                   int temp = arr[j];

                                   arr[j] = arr[j + 1];

                                   arr[j + 1] = temp;

                            }

                     }

              }

       }

 

3、String和StringBuffer区别

     1、String一旦被创建就不能被修改,但是StringBuffer可以被修改

     2、StringBuffer采用的是缓冲区机制,随着数据的增多,还会继续开辟内存空间

 

基本类型的包装类

基本类型的数据我们只能使用值,不能做更多的操作。为了方便我们操作,java就把每种基本类型进行了包装。

int--Integer

char--Character

5、JDK5以后的新特性

     1、自动装箱:     基本类型  赋值给 引用类型      Integer integer = 1;

     2、自动拆箱:     引用类型  赋值给 基本类型      int i = new Integer(2);

String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);//true
s5指向字符串常量池"hello"的地址,s6指向已经存在的"hello"的地址
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);  // false
System.out.println(i5.equals(i6)); // true   

Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8); // true
System.out.println(i7.equals(i8)); // true

 结论:byte范围内的值(-128 ~ 127),java提供了一个常量池。直接赋值给Integer,是从常量池里面获取的。

 

SimpleDateFormat类

常用的一个:yyyy-MM-dd HH:mm:ss:SSS

 

Calendar类

Calendar calendar = Calendar.getInstance();

1.获取月份  Calendar.MONTH + 1 (Calendar.MONTH的值的范围是0-11,需要+1变成对应的月份)

int month = calendar.MONTH+1;

2.获取星期

有些地区以星期日作为一周的第一天

 //外国人的1是中国的7

 //外国人的2-7是中国的周1-6

int week =  calendar.get(Calendar.DAY_OF_WEEK)==1?7: calendar.get(Calendar.DAY_OF_WEEK)-1;

 

迭代器

  ConcurrentModificationException:在迭代的时候给集合增加元素,删除元素(注意:不是通过索引删除)造成的

 并发修改异常:

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(2);
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer integer = iterator.next();
            if(integer==2)
                list.remove(integer);
        }
    }
}

在单线程环境下的解决办法

使用迭代器iterator的remove方法

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(2);
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer integer = iterator.next();
            if(integer==2)
                iterator.remove();   //注意这个地方
        }
    }
}

多线程解决方案

List<string> myList = new CopyOnWriteArrayList<string>();
 myList.add( "1");
 myList.add( "2");
 myList.add( "3");
 myList.add( "4");
 myList.add( "5");
 
new Thread(new Runnable() {
   
     @Override
     public void run() {
          for (String string : myList) {
               System.out.println("遍历集合 value = " + string);
             
               try {
                    Thread.sleep(100);
               } catch (InterruptedException e) {
                    e.printStackTrace();
               }
          }
     }
}).start();
 
new Thread(new Runnable() {
   
     @Override
     public void run() {
        
          for (int i = 0; i < myList.size(); i++) {
               String value = myList.get(i);
             
               System.out.println("删除元素 value = " + value);
         
           if (value.equals( "3")) {
                myList.remove(value);
                i--; // 注意                           
           }
         
           try {
                    Thread.sleep(100);
               } catch (InterruptedException e) {
                    e.printStackTrace();
               }
          }
     }
}).start();

参考:https://www.cnblogs.com/dolphin0520/p/3933551.html

 

for高级循环

是集合中(Collection)迭代器的简写形式

   for(数组 或 Collection子类 的元素类型 变量名 :数组 或 Collection子类)

     { //使用变量 }

 for(Object obj : list){

                    System.out.println(obj);

}

List接口的三个子类的

查询多用ArrayList(数组),增删多用LinkedList(链表),Vector和ArrayList功能相同,线程安全,效率低

 

HashSet类中的add(obj)方法如何保证元素的唯一性

重写hashCode()和equals()方法

 

TreeSet如何保证元素唯一性

内部采用的是二叉树结构,相同的元素就不操作

2如何判断两个元素是否相同

A、对象所属的类去实现Comparable接口
重写compareTo方法
如果该方法返回0 ,则两个元素相同

public class Person implements Comparable{
               @Override
               public int compareTo(Object o) {
                    return 0;
               }
}
TreeSet set = new TreeSet();
set.add(new Person());

B、调用TreeSet的带参构造方法,传入Comparator的子类对象
该子类对象重写compare(T o1, T o2)方法
如果返回0则两个元素相同

public class MyComparator implements Comparator {
     @Override
     public int compare(Object o1, Object o2) {
          return 0;
     }
}

TreeSet set = new TreeSet(new MyComparator());
set.add(new Student);

。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值