java笔记及改错

1。java编译器会将java程序转换为字节码

2.通过数组名.length()不能获得数组的长度,因为length不是方法,用数组名.length可以获得数组的长度

3。byte b=(byte)128红色部分不能省略,防止内存溢出

4。重载:一个类中,可以编写多个方法名相同其参数和参数个数不同的方法

      重写:1.必须是在继承里

                      2.方法名、返回值类型、参数个数和参数类型 都必须相同

                      3.派生类重写的方法的访问权限不能低于基类的权限

                    4.派生类抛出的异常应该和基类相等或比基类更小

5。String类


replace方法不会对原字符串产生影响,而是返回一个新的字符串,两个字符串的地址不一样



标识符与关键字:

标识符:标记名称的符号。

针对某种确定的编程语言,只要符合这种语言的命名规则,名称就是合法的标识符。

从这个角度上来说,关键字更加符合标识符的标准。

两者之间的关系:

1、 关键字肯定是合法的标识符;

2、 作为关键字,肯定不能在该编程语言中做为变量的命名标识符;

3、 同一个合法的标识符(包括关键字),在一种语言中是不合法的名称,在另一种语言中可能就是合法的。


反射:

这个章节中的内容属于“非常规编程”技术;

常用于框架设计或模式设计中。

在一个类中,总的来说,有字段和方法及构造器三部分组成;

1、 字段是来保存类或对象的数据值的;

2、 方法是对类或对象的操作的;

3、 构造器是构造对象的;

反射是用来处理“元数据”的。

比如说某类有一个字段,叫做name,它用来保存对象的姓名值;

反射技术是来操作name这个字段本身的,是对字段、方法、构造器的封装。

Field

Method

Constructor

以上的三个反射类或相关类都在java.lang.reflect包中。

java源代码中,只有java.lang包中的类会自动导入进来,并不包括子包。就是说如果需要使用子包中类时,必须使用import导入到代码中。

通过类名或类实例可以得到类综合信息的封装体,这个封装也是以对象的方式提供的,称为Class。这个Class对象封装了该类的所有“元数据”信息。

如何得到这个封装体?

1、 通过类名

2、 通过类对象,调用Object中提供的getClass()方法

使用Class<T>Class<?>的场合?

1、 如果类名已知,使用Class<T>;

2、 如果类名未知,使用Class<?>



静态代理实现: 1. 学生接口定义 ```java public interface Student { void study(); void homeWork(); } ``` 2. 学生核心实现 ```java public class PrimaryStudent implements Student { @Override public void study() { System.out.println("学生正在上课学习..."); } @Override public void homeWork() { System.out.println("学生正在做家庭作业..."); } } ``` 3. 学生代理实现 ```java public class StudentProxy implements Student { private Student student; public StudentProxy(Student student) { this.student = student; } @Override public void study() { System.out.println("学生准备上课..."); student.study(); System.out.println("学生听老师讲课,做笔记,完成课堂练习..."); System.out.println("学生上课结束,收拾书包,带走垃圾..."); } @Override public void homeWork() { System.out.println("学生准备做家庭作业,复习今天课堂所学知识..."); System.out.println("学生开始做家庭作业,打开作业本,写作业,检查改错,预习..."); student.homeWork(); System.out.println("学生完成家庭作业,收拾书本..."); } } ``` 4. 测试 ```java public class TestStaticProxy { public static void main(String[] args) { Student primaryStudent = new PrimaryStudent(); Student proxy = new StudentProxy(primaryStudent); proxy.study(); System.out.println("-------------"); proxy.homeWork(); } } ``` 输出结果: ``` 学生准备上课... 学生正在上课学习... 学生听老师讲课,做笔记,完成课堂练习... 学生上课结束,收拾书包,带走垃圾... ------------- 学生准备做家庭作业,复习今天课堂所学知识... 学生开始做家庭作业,打开作业本,写作业,检查改错,预习... 学生正在做家庭作业... 学生完成家庭作业,收拾书本... ``` 动态代理实现: 1. 学生接口定义 ```java public interface Student { void study(); void homeWork(); } ``` 2. 学生核心实现 ```java public class PrimaryStudent implements Student { @Override public void study() { System.out.println("学生正在上课学习..."); } @Override public void homeWork() { System.out.println("学生正在做家庭作业..."); } } ``` 3. 动态代理实现 ```java public class StudentDynamicProxy implements InvocationHandler { private Object target; public StudentDynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("学生准备上课..."); Object result = method.invoke(target, args); System.out.println("学生听老师讲课,做笔记,完成课堂练习..."); System.out.println("学生上课结束,收拾书包,带走垃圾..."); return result; } public static Object createProxy(Object target) { return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new StudentDynamicProxy(target) ); } } ``` 4. 测试 ```java public class TestDynamicProxy { public static void main(String[] args) { Student primaryStudent = new PrimaryStudent(); Student proxy = (Student) StudentDynamicProxy.createProxy(primaryStudent); proxy.study(); System.out.println("-------------"); proxy.homeWork(); } } ``` 输出结果: ``` 学生准备上课... 学生正在上课学习... 学生听老师讲课,做笔记,完成课堂练习... 学生上课结束,收拾书包,带走垃圾... ------------- 学生准备做家庭作业,复习今天课堂所学知识... 学生开始做家庭作业,打开作业本,写作业,检查改错,预习... 学生正在做家庭作业... 学生完成家庭作业,收拾书本... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值