今日内容
1. Java注解
Java注解
所有注解都继承自Java.lang.annotation下的
Annotation公共接口
注解的本质就是接口
--接口中的方法名在注解中称为属性
--注解中有且只有一个value属性!--用来给属性赋值!
jdk提供内置注解--列举一些
-标记 当前一些使用访问
@Override
标记当前这个方法是否重写方法(父类或者接口)
@SuppressWarnings
抑制警告 :项目部署上线的,所有的类不能出现黄色警告线
@Deprecated
标记这个方法已经过时
@FunctionalInteface
标记接口用的,是否为函数式接口(接口中有且仅有一个抽象方法)
内置注解依赖一些"元注解"
@Target
-标记指定的注解可以使用的范围!
ElementType[] value()
-value属性的返回值枚举类型的数组
ElementType
-说明@Target使用的范围 (这四个经常用)
TYPE
-标记注解可以在类上或者接口上使用
FIELD
-标记注解可以在成员变量上使用
METHOD
-标记这个注解可以在方法上使用
PARAMETER
-标记你这个注解可以在形式参数上使用
@Retention
-标记当前这个注解能够在什么级别下用
RetentionPolicy value()
-value属性返回值枚举RetentionPolicy
三个级别(三个阶段)
SOURCE
-源代码的代码编译阶段
CLASS
-当前注解中类相关的加载阶段
RUNTIME
-运行阶段
@Documented
-解析的时候,针对类或接口上使用这个注解,保留文档注释!
注意
jdk8以后 接口可以定义默认方法,可以被子实现类重写
接口中可以定义默认方法
-default
-static
//源码分析
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})//可以在基本上全段用
@Retention(RetentionPolicy.SOURCE) //在编译时期用
public @interface SuppressWarnings { //压制黄线警告
String[] value();//唯一的返回值
}
注解中的属性名(就是接口中的成员方法名)的返回值类型可以是哪些数据类型?
5种类型
基本数据类型
字符串类型
枚举类型
注解类型
以上类型是数组格式
自定义注解
当我们通过反射调用类中方法时
书写配置文件
-获取配置文件中的当前类的全限定名称
-获取公共方法名
-读取配置文件
-调用
还可以用注解的方式--本质是从外部输入,然后在解封获取信息!
书写注解
-将全限定名称和方法名写进去
自定义注解,解析注解
1)获取当前注解标记的这个类的字节码文件对象
2)通过Class字节码文件对象---->解析注解---获取注解(接口)---->实现类对象
public A getAnnotation(Class annotationClass)
-参数里面说的注解的字节码文件对象
-调用
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//书写Target和Retention
@Target(ElementType.TYPE) //可以作用在类上
@Retention(RetentionPolicy.RUNTIME) //用在运行阶段
public @interface myAnnotation {
//书写全限定名称,方法名
String classname(); //本质是接口,所以接口书写方式
String methodname();
}
//准备方法
public class DemoTest {
public void show(){
System.out.println("我是通过注解获得信息,反射调用的一句话!");
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//测试方法和接口
//注解--直接输入注解内需要的内容,全限定名称,方法名
@myAnnotation(classname = "annotation.annotationTest_01.DemoTest",methodname = "show")
public class TestAnnotation {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
//自定义注解--解析
//获取当前标记注解的类的字节码文件
Class clazz = TestAnnotation.class ;
//通过Class字节码文件对象---->解析注解---获取注解(接口)---->实现类对象
//这一步相当于获取到了我们给注解属性赋的值
myAnnotation myannotation = (myAnnotation) clazz.getAnnotation(myAnnotation.class);
//获取调用值
String classname = myannotation.classname();
String methodname = myannotation.methodname();
//通过反射调用方法
//获得方法类的字节码文件
Class clazz1 = Class.forName(classname);//直接填从注解中获取的全限定名称
Object obj = clazz1.newInstance(); //创建实例对象
Method method = clazz1.getMethod(methodname);//获取方法--通过注解中的方法名
method.invoke(obj);//调用之中的方法
//我是通过注解获得信息,反射调用的一句话!
}
}
2. CSS定位属性
CSS定位属性
position定位属性:
absolute:绝对定位
当前这个标签针对父元素进行移动
relative:相对定位
当前元素是针对之前的位置进行移动
fixed:固定定位
结合left/right/top/bottom---执行像素大小,将整个盒子进行移动
3. JavaScript
JavaScript
常用的函数
window.alert("提示框")--window可省略
alert("hello,javascript");
window里面确认提示
var flag = confirm("你要丢下我嘛?") ;
prompt带有一个消息和文本输入框
window.prompt("请输入动态密令:") ;
向浏览器输出内容
document.write("hello,javaScript") ;
浏览器中控制台打印内容
console.log("hello,javascript") ;
js中变量以及数据类型
javasript
-弱类型语言(语法结构不严谨)
js中定义任何变量以及创建对象 使用var (var可以省略不写)
数据类型:
1)无论整数还是小数都是number 数值类型
--提升为 js内置对象 Number对象
2)boolean类型
--提升内置对象 Boolean对象
3)无论是字符还是字符串 都是string类型
--提升js内置对象 String对象
4)对象类型 object
--代表所有js对象的模板
5)未定义类型undefined
--没有值
查看js中的变量的数据类型 typeof(变量名)
js的运算符--和Java基本一摸一样!
运算符
算术
+,-,*,/,%
比较
==,!=,<,<=,>,>=
逻辑
&&,|| 前端中使用 (提高执行效率:短路效果)
三元
(表达式)?执行成立的结果:否则不成立的结果;
赋值运算符
= ,+=,-=,*=,%
js流程控制语句
顺序结构语句
代码由上而下依次加载
选择结构语句
if语句
if
if...else
if ...else if...else...
switch(表达式或变量){
case "可以变量/也可以是常量":
语句1;
break ;
...
default :
语句n;
break ;
}
for-in语句:针对数组以及对象的属性进行遍历--类似于Java中的增强for
for(var 变量名 in 数组对象或者对象名){
使用变量名
}