- 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
什么是类:
一张图纸可以创造多个工程图,也就是创建多个对象,不同的东西。
怎么创建对象
什么是对象:
Person person; person = new Person("张三"); person = new Person("李四");
person先指向了“张三”这个对象,然后又指向了“李四”这个对象。
Person person1 = new Person("张三"); Person person2 = person1;
面向对象:
执行者一个步骤一个步骤的去完成。但凡有一个步骤少了,该事情就不能完成
事物的属性与行为,放在类中,隐藏对象属性和实现细节,仅对外提供公共的访问方式。
继承:
Java中使用变量的规则:
就近原则,顺序:局部变量--当前类的成员变量--父类成员变量
使用场景:
没有方法体,只有方法声明,用修饰abstract(子类必须重写)
接口:就是一个契约、约定
描述类具有什么功能,但是并不给出具体的实现,接口是对外提统一组规则,标准。
Java.long.包下的类不需要导包,否则需要先导包在使用。
getClass()返回的字节码文件对象,说明一个类只一个字节码文件
//多态 Fu fu = new Fu(); //父类引用不能使用子类特有成员 fu.getId();点不出来 Fu zi = new Zi(); zi.getId();点不出来 Zi zi1 = new Zi(); zi1.getId();可以点不出来 //需要向下转型,才可以获得父类的方法 Zi fu1 = (Zi) fu; fu1.getId();可以点不出来
| 基本类型 | 包装器类型 |
|---|---|
| boolean | Boolean |
| char | Character |
| int | Integer |
| byte | Byte |
| short | Short |
| long | Long |
| float | Float |
| double | Double |
String string = "8989"; int i1 = Integer.parseInt(string); System.out.println(i1); 输出:8989
普通迭代器在遍历集合的同时不能添加过删除元素,否则回报并发修改异常
列表迭代器在遍历集合的同时可以修改集合中的元素(添加,删除)必须是使用列表迭代器的方法(listIterator)
ListIterator listIterator = list.listIterator(); while (listIterator.hasNext()) { Student student = new Student("黄波1", 12); Student next = listIterator.next(); System.out.println(student.equals(next));//因为是false所以没有提娜佳成功 if (student.equals(next)) { Student student2 = new Student("黄波222", 2212); listIterator.add(student2); } System.out.println("next:::::::::::"+next); } System.out.println(list);
泛型
List<泛型> list= new ArrayList<>();
ArrayList list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(6); list.add(3); System.out.println(Collections.max(list));最大值 Collections.sort(list);倒序排列 Collections.reverse(list);反转 System.out.println(list); 输出: 6 [1, 2, 3, 3, 4, 6]
Map集合:
HashMap<Integer, Student> hashMap = new HashMap<>(); Student put = hashMap.put(1, new Student("张强", 21)); System.out.println(put); Student put1 = hashMap.put(1, new Student("张3", 22)); System.out.println(put1); // hashMap.put(2, new Student("张慧", 23)); System.out.println(hashMap); 输出: null Student{name='张强', age=21} {1=Student{name='张3', age=22}}
try { 尝试执行的代码! System.out.println("=========="); } catch (Exception exception) { 出现异常之后处理的代码 exception.printStackTrace(); }finally { //即使在try、catch中加return,fianlly中的代码也会执行。 一定会执行的代码 }
string中的方法:
String s1 = "qiansheng"; String s = "SongXianYang"; System.out.println(s.toString()); System.out.println(s.charAt(1)); System.out.println(s1.compareTo(s)); System.out.println(s.concat("1212121")); System.out.println(s.indexOf("X")); 输出: SongXianYang o 30 SongXianYang1212121 4
线程安全与线程不安全
线程安全:在多线程访问时,采用加锁机制,一个线程访问某条数据时,该线程读取完,释放了线程,下一个线程才可以访问。
线程不安全:没有数据保护,多个线程下去访问同一个资源会发生数据脏读。
this与super:
this:表示调用本类中的方法和属性,本类对象的引用,指向本类对象。
super: 表示在子类中调用父类的方法和属性,父类对象的引用,指向父类对象。
异常可以分为:
运行时异常RuntimeException:NullPointerException、ClassCastException
检查异常CheckedException:IOException、SQLException
异常处理的处理方式:
Synchronized
总结:保证了一个线程,只能访问一个资源。即一个线程访问,另一个线程等待。
Java中堆栈内存分布:
Java中short a=1;a=a+1和a+=1的区别及+=的类型转换
short a=1; //a= (a+1);//类型不匹配:不能从 int 转换为 short a=(short) (a+1); a+=1;
对于short a=1; a=a+1; 由于a+1运算时会自动提升表达式的类型,也即int类型,再将结果赋值给short类型的a时,类型会不匹配;
对于short a=1; a+=1; java编译器会对+=进行特殊处理,进行了类型转换,通过反编译.class源码可以看到a+=1被编译为:a=(short) (a+1)
JAVA规范上说 【e1+=e2 实际上是 e1=(T1)(e1+e2) 】,其中T1是e1的数据类型