META 标签用来描述一个 html 网页文档的属性.
含义:元素可提供相关页面的元信息.
元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词.
标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称 / 值对.
meta 是 html 语言 head 区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的 html 代码:
1. 属性:
name 属性主要用于描述网页,与之对应的属性值为 content,content 中的内容主要是便于 搜索引擎机器人查找信息和分类信息用的.
meta 标签的 name 属性语法格式是:参数 "content=" 具体的参数值 ">;.
其中 name 属性主要有以下几种参数:
A,Keywords(关键字)
说明:keywords 用来告诉搜索引擎你网页的关键字是什么.
举例:
B,
description
(网站内容描述)说明:description 用来告诉搜索引擎你的网站主要内容.
网站内容描述(description)的设计要点:
①网页描述为自然语言而不是罗列关键词(与 keywords 设计正好相反);
②尽可能准确地描述网页的核心内容,通常为网页内容的摘要信息,也就是希望搜索引擎在检索结果中展示的摘要信息;
③网页描述中含有有效关键词;
④网页描述内容与 网页标题 内容有高度相关性;
⑤网页描述内容与网页主体内容有高度相关性;
⑥网页描述的文字不必太多,一般不超过搜索引擎检索结果摘要信息的最多字数(通常在 100 中文字 之内,不同搜索引擎略有差异).
举例:
C,robots(机器人向导)
说明:robots 用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引.
content 的参数有 all,none,index,noindex,follow,nofollow.默认是 all.
举例:
D,author(作者)
说明:标注网页的作者
http-equiv 顾名思义,相当于 http 的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为 content,content 中的内容其实就是各个参数的变量值.
meta 标签 的 http-equiv 属性语法格式是: ;其中 http-equiv 属性主要有以下几种参数:
A,Expires(期限)
说明:可以用于设定网页的到期时间.一旦网页过期,必须到服务器上重新传输.
用法:
注意:必须使用 GMT 的时间格式.
B,Pragma(cache 模式)
说明:禁止浏览器从本地计算机的缓存中访问页面内容.
用法:
注意:这样设定,访问者将无法脱机浏览.
C,Refresh(刷新)
说明:自动刷新并指向新页面.
用法:;(注意后面的引号,分别在秒数的前面和网址的后面)
注意:其中的 2 是指停留 2 秒钟后自动刷新到 URL 网址.
D,Set-Cookie(cookie 设定)
说明:如果网页过期,那么存盘的 cookie 将被删除.
用法:
注意:必须使用 GMT 的时间格式.
E,Window-target(显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示.
用法:
注意:用来防止别人在框架里调用自己的页面.
F,content-Type(显示字符集的设定)
说明:设定页面使用的字符集.
用法:
G,content-Language(显示语言的设定)
用法:2. 功能:
meta 标签的一个很重要的功能就是设置关键字,来帮助你的主页被各大搜索引擎登录,提高网站的访问量.
Java 中的修饰词
类内部 package 内 子类 其他
public 允许 允许 允许 允许
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
private 允许 不允许 不允许 不允许
1,public
使用对象:类,接口,成员
介绍:无论它所处在的包定义在哪,该类(接口,成员)都是可访问的
2,protected
使用对象:成员
介绍:成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类
用 protected 修饰的成员(变量或方法),在类内部可以调用,同一个 package 下的其他类也可以调用,子类里也可以调用,其他地方则不可以调用,也就是说在其他
必须是该成员所属类的子类.
3,default
无修饰词(默认),表示包访问权限(friendly, java 语言中是没有 friendly 这个修饰符的,这样称呼应该是来源于 c++ ),同一个包内可以访问,访问权限是包级访问权限;
4,private
使用对象:成员
介绍:成员只可以在定义它的类中被访问
5,abstract
使用对象:类,接口,方法
介绍:类中包括没有实现的方法,不能被实例化.如果是一个 abstract 方法,则方法体
为空,该方法的实现在子类中被定义,并且包含一个 abstract 方法的类必须是一个 abstract 类
6,final
使用对象:类,方法,字段,变量
介绍:被定义成 final 的类不允许出现子类,不能被覆盖(不应用于动态查询),字段值
不允许被修改.
7,static
使用对象:类,方法,字段,初始化函数
介绍:成名为 static 的内部类是一个顶级类,它和包含类的成员是不相关的.静态方法是类方法,是被指向到所属的类而不是类的实例.
静态字段是类字段,无论该字段所在的类创建了多少实例,该字段只存在一个实例被指向到所属的类而不是类的实例.初始化函数是在
装载类时执行的,而不是在创建实例时执行的.
9,synchronized
使用对象:方法
介绍:对于一个静态的方法,在执行之前 jvm 把它所在的类锁定;对于一个非静态类的方法,执行前把某个特定对象实例锁定.
10,volatile
使用对象:字段
介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的.
volatile 有时可以代替 synchronized.
11,transient
使用对象:字段
介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起.
12,strictfp
使用对象:类,方法
介绍:strictfp 修饰的类中所有的方法都隐藏了 strictfp 修饰词,方法执行的所有浮点
计算遵守:IEEE 754 标准,所有取值包括中间的结果都必须表示为 float 或 double 类型,而不能利用
由本地平台浮点格式或硬件提供的额外精度或表示范围.
进程和线程 在并发性程序中,有两个基本的执行单元:进程和线程.
一个进程就是一个独立的执行环境.进程有着完整的,私有的基本的运行时资源,尤其是每个进程都有自己的内存空间.
进程通常会被看作是程序或者是应用程序的同义词.然而,用户看到的应用程序实际上可能是多个相互协作的进程.为了方便进程间通讯,绝大多数的操作系统都支持 IPC(Inter Process Communication , 进程间通讯),诸如管道 (pipe) 和套接字 (socket). IPC 不仅可用于统一系统中进程间的相互通讯,还可以用于不同系统间的进程通讯.
大多数的 java 虚拟机的实现都是作为一个单独的进程的.通过使用 ProcessBuilder,Java 应用程序可以创建额外的进程.多进程的应用程序超出了本节讨论的范围.
线程有时被称为是轻型的进程.进程和线程都提供了一种运行环境.但是创建一个新的线程比创建一个新的进程需要更少的资源.
线程存在于进程之中--每个进程中至少有一个线程.同一进程的多个线程间共享进程的资源,包括内存和文件.这样做是出于效率的考虑,但是可能带来潜在的通信问题.
多线程是 Java 平台的一个重要特性.如果我们将进行诸如内存管理和信号处理的线程算上的 "系统" 线程计算上的话,那么每一个应用程序至少都有一个线程,
或者是多个线程.但是从应用程序的编程人员的角度来看,我们总是从一个叫做主线程的线程开始.该线程能够创建其他的线程,这点我们会在下一节中进行讨论.
线程对象
每一个线程都是和类 Thread 的实例相关联的.在 Java 中,有两种基本的使用 Thread 对象的方式,可用来创建并发性程序.
在应用程序需要发起异步任务的时候,只要生成一个 Thread 对象即可,这样可以直接控制线程的创建并对其进行管理.
把应用程序的任务交给执行器 (executor),这样可以将对线程的管理从程序中抽离出来.
第一种方式 继承 Thread 类 第二种方式 实现 Runnable 接口
main 方法也是由一个线程执行,这个线程叫主线程; main{m1{}; m2(); m3(); }
使用 Runnable 接口实现线程的好处 1. 解除线程与线程功能的耦合 2. 保留类的继承特性
频繁的从系统开辟新的线程会比较消耗系统资源,对程序的性能造成影响,我们可以设计出一个线程池,线程 run 完之后,而是会回到线程池中,
public class ThreadDemo {
public static void main(String[] args) {
// 父类的引用指向子类的对象
Thread t=new MyThread();
Thread t1=new MyThread1();
// 启动 线程
t.start();
t1.start();
}
}
// 继承 Thread 类创建线程
class MyThread extends Thread{
// 线程要做的内容
public void run() {
for(int i=0;i<100;i++){
System.out.println("你是谁?"+i);
}
}
}
class MyThread1 extends Thread{
// 线程要做的内容
public void run() {
for(int i=0;i<100;i++){
System.out.println("查水表?"+i);
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
Runnable r1=new MyRunnable1();
Runnable r2=new MyRunnable2();
Thread t1=new Thread(r1);
Thread t2=new Thread(r2);
t1.start();
t2.start();
}
}
class MyRunnable1 implements Runnable{
public void run() {
for(int i=0;i<10;i++) {
System.out.println("你是谁啊?");
}
}
}
class MyRunnable2 implements Runnable{
public void run() {
for(int i=0;i<10;i++) {
System.out.println("开门查水表?");
}
}
}
public class ThreadDemo3 {
public static void main(String[] args) {
ExecutorService es=Executors.newFixedThreadPool(3);
Runnable r1=new Runnable(){
public void run() {
System.out.println("hello!");
}
};
Runnable r2=new Runnable(){
public void run() {
System.out.println("helloWorld!");
}
};
Runnable r3=new Runnable(){
public void run() {
System.out.println("helloKitty!");
}
};
es.submit(r1);
es.submit(r2);
es.submit(r3);
}
}
使用 jdk5 提供的类创建线程池对象 ExecutorService es=Executors.newFixedThreadPool(个数);
来源: http://www.bubuko.com/infodetail-2477206.html