课堂知识整理
来源:互联网 发布:开淘宝店需要什么资料 编辑:程序博客网 时间:2024/05/18 01:13
2017/3/13
1.为什么要把变量设置为私有,get/set方法设置为共有?
封装。函数比变量更加灵活,可以增加未来修改的灵活性。当不是直接return变量,而是需要多条语句组合进行计算的时候会更方便。
2.匿名内部类是什么?(借鉴此文章 http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html)
匿名内部类就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,通常用来简化代码编写。
使用匿名内部类的前提:必须继承一个父类或实现一个接口。
实例1:不使用匿名内部类来实现抽象方法
abstract class Animal{ public abstract void eat();}class Tiger extends Animal{ public void eat(){ System.out.println("eat meat!"); }}public class Demo{ public static void main(String[] args){ Animal a = new Tiger(); a.eat(); }}运行结果: eat meat!
Tiger类继承了Animal类,然后实现了Tiger的一个实例,将其向上转型为Animal类的引用。
但是如果此处的Tiger类只使用一次,将其编写为一个独立的类很麻烦,此时引入匿名内部类。
实例2:匿名内部类的基本实现
abstract class Animal{ public abstract void eat();} public void eat(){ System.out.println("eat meat!"); }}public class Demo{ public static void main(String[] args){ Animal a = new Animal(){ public void eat(){ System.out.println("eat meat!"); }}; a.eat(); }}运行结果:eat meat!
直接将抽象类Animal中的方法在大括号中实现了,可以省略一个类的书写。
实例3:在接口上使用匿名内部类
interface Person { public void eat();} public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); }}由以上可知,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类实现
最常用的情况是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口
实例4:Thread类的匿名内部类实现
public class Demo { public static void main(String[] args) { Thread t = new Thread() { public void run() { for (int i = 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); }}运行结果:1 2 3 4 5
实例5:Runnable接口的匿名内部类实现
public class Demo { public static void main(String[] args) { Runnable r = new Runnable() { public void run() { for (int i = 1; i <= 5; i++) { System.out.print(i + " "); } } }; Thread t = new Thread(r); t.start(); }}运行结果: 1 2 3 4 5
3.构造函数是用来干嘛的?
构造函数用来在创建对象时完成对对象属性的一些初始化等操作,当创建对象时,对象会自动调用它的构造函数。
一般来说,构造函数有以下几方面的作用:
①给创建的对象建立一个标识符
②为对象数据成员开辟内存空间
③完成对象数据成员的初始化
2017/03/26
1.Q: C++ 里string类中size()和length()的区别
A:没有区别。C++ Reference中对于String字符串中函数 size和length的解释是这样的:
size Return length of string
length Return length of string
两者的微小区别就是:
size() 一般用作返回容器大小的方法
length() 一般用作返回一个序列的长度
但是无论用size还是length,返回的结果都是一样的。
2.Q:Java中length、length()和size()的区别
1.Java中的length属性是针对数组说的,比如知道数组的长度。
2.length()方法是针对字符串String说的,用来返回字符串的长度。
3.size()方法是针对泛型集合说的,返回泛型中元素个数。
2017/4/02什么是java模板类
给定一个带模板参数的类
class A<T>
{
}
如何在运行时获取 T的类型?
java中没有直接方法来获取T.Class. (至少JDK 1.7以前不可能)
其根本原因在于: Java语言是支持反射的,但是JVM不支持,因为JVM具有“Type erasure”的特性,也就是“类型擦除”。
但是Java无绝人之路,我们依旧可以通过其他方法来达到我们的需求。
方法1. 通过构造函数传入实际类别. 【有人说这个方法不帅气,但是不可否认,这种方法没有用到反射,但是最为高效,反射本身就不是高效的。】
public class A<T> { private final Class<T> clazz; public A<T>(Class<T> clazz) { this.clazz = clazz; } // Use clazz in here }方法2. 通过继承这个类的时候传入模板T对应的实际类:(定义成抽象类也可以)
class A<T>{ public Class getTClass(int index) { Type genType = getClass().getGenericSuperclass(); if (!(genType instanceof ParameterizedType)) { return Object.class; } <span style="white-space:pre"> </span> Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); <span style="white-space:pre"> </span> if (index >= params.length || index < 0) { <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>throw new RuntimeException("Index out of bounds"); <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> if (!(params[index] instanceof Class)) { <span style="white-space:pre"> </span> return Object.class; <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> return (Class) params[index]; } }
继承类:
public class B extends A<String> { public static void main(String[] args) { B bb =new B(); bb.getTClass();//即答案 } }
- 课堂知识整理
- 课堂整理
- 课堂整理
- 知识课堂与生命课堂
- 课堂知识总结
- 课堂知识总结
- 课堂知识总结
- 课堂整理(三)
- 库函数的课堂整理
- 数据库的课堂整理
- 11.1 课堂笔记整理
- JSP入门课堂知识总结
- java 课堂小知识总结
- java 课堂小知识总结
- 【课堂程序整理】字符统计
- 11.04/05课堂内容整理
- 知识整理
- 知识整理
- 如何做好接口测试
- C++11之std--future和std--promise
- Exam CodeForces
- 不能声明为虚函数的函数:
- 理解GC日志
- 课堂知识整理
- leetcode解题之107 # Binary Tree Level Order Traversal II Java版
- Java中类加载的时机
- Codeforces 276D Little Girl and Maximum XOR 贪心+构造
- bzoj1066: [SCOI2007]蜥蜴
- 基于Cocopods的模块化管理实现
- 蓝桥杯-凑算式
- linux里面的简单命令
- 权限管理系统