main方法

 * main()方法的使用说明
* main方法是程序的主入口(一个主程序 先从main开始进行执行)
*
*
* main方法也可以是一个普通的静态方法

由于Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是 public,又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须 是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令
时传递给所运行的类的参数。

又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创
建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情
况,我们在之前的例子中多次碰到。

代码块

代码块也是类的成员变量之一, 分为静态代码块和非静态代码块

static{  // 静态代码块

}

//非静态代码块

{

}
 * 类的成员之四: 代码块(或初始化代码块)  类的成员: 属性 方法 ,构造器 ,代码块
* <p>
* <p>
* 1. 代码块的作用: 用来初始化类或对象
* 2. 代码块如果有修饰的话, 只能使用static
* 3. 分类: 静态代码块,非静态代码块

eg:

public class CodeBlock {
public static void main(String[] args) { String desc = BlockPerson.desc; // 当我是静态代码块
BlockPerson blockPersonOnew = new BlockPerson(); //我是非静态代码块
} } class BlockPerson { String name;
int age;
static String desc = "我是一个人"; //构造器
public BlockPerson() {
} public BlockPerson(String name, int age) {
this.name = name;
this.age = age;
} //代码块 static{ //静态代码块 随着类的加载而加载
System.out.println("我是静态代码块"); } { //非静态代码块
System.out.println("我是非静态代码块"); } @Override
public String toString() {
return "Person[ name:"+name+"age:"+age+"]";
} public static void info(){
System.out.println("我是一个人");
} }

非静态代码块可调用静态的方法和属性

    { //非静态代码块

        System.out.println("我是非静态代码块");
age = 1;
desc = "我是一个爱学习的人"; //非静态代码块可以调用静态结构
info(); }

静态代码块和非静态代码块的区别

4. 静态代码:
* > 内部可以有输出语句
* > 随着类的加载而执行,而且只执行一次
* > 初始化类的属性
* > 如果一个类中定义了多个静态代码块,按照声明的先后顺序执行
* > 静态代码块的执行要优先于非静态代码块执行(因为静态代码块是随着类的加载而执行,非静态是需要对象实例化后执行的)
* >静态代码块内只能调用静态的属性和方法 不能调用非静态的 * 5. 非静态代码块
* > 内部可以有输出语句
* > 随着对象的创建而执行
* > 每创建一个对象就执行一次非静态代码块,只要类不重新加载就不会重新执行
* > 作用: 可以在创建对象是 对对象的属性赋值
* > 可以调用静态和非静态的属性和方法

对象赋值的方法:

对象赋值的方法:

* 对属性可以赋值的位置:
* 1. 默认初始化
* 2. 显示初始化 / 5. 在代码块中赋值(谁先写就先赋值谁)
* 3. 构造器初始化
* 4. 有了对象之后, 可以通过"对象.属性" 或" 对象.方法" 赋值
顺序是: 1 >2 /5 > 3 >4

eg:

public class OrderTest {
public static void main(String[] args) {
Rder rder = new Rder();
System.out.println(rder.age); // }
} class Rder{
int age = 3; // 显示赋值
{
age = 4;
} }

对象赋值的

面试题:

此处,Something类的文件名叫OtherThing.java
class Something {
public static void main(String[] something_to_do) {
System.out.println("Do something ..."); }
}
上述程序是否可以正常编译、运行?

结果:

可以编译运行,只不过无法输出语句 因为主类没有main方法主类没有执行

结果

练习题:

说出以下内容的执行结果:
class Person {
public static int total;
static {
total = 100;
System.out.println("in static block!"); }
}
public class PersonTest {
public static void main(String[] args) {
System.out.println("total = " + Person.total);
System.out.println("total = " + Person.total);
} }

结果:

因为静态代码块是随着类的加载而执行 因为类的加载优先于对象的创建 所以先执行静态代码块中的输出语句,然后再输出下面对面的调用的属性
in static block
total=100
total=100

结果

下面题目的输出是:

//总结: 由父及子,静态先行

public class LeftTest {
public static void main(String[] args) {
new Left(); }
} class Root {
static {
System.out.println("我是Root的静态代码块");
} {
System.out.println("我是Root的非静态代码块"); } public Root() {
System.out.println("我是Root的无参构造器"); }
} class Mid extends Root{
static {
System.out.println("我是Mid的静态代码块"); } {
System.out.println("我是Mid的非静态代码块"); } public Mid() {
System.out.println("我是Mid的无参构造器");
} public Mid(String msg){
this();
System.out.println("Mid的参数构造器,参数是:msg:"+msg);
}
} class Left extends Mid {
static {
System.out.println("我是Left的静态代码块");
} {
System.out.println("我是left的非静态代码块");
} public Left() {
System.out.println("我是left的无参构造器");
} public Left(String msg){
super();
System.out.println("我是Left的参数构造器,参数是msg:"+msg);
} }

结果:

         * 我是Root的静态代码块
* 我是Mid的静态代码块
* 我是Left的静态代码块
* 我是Root的非静态代码块
* 我是Root的无参构造器
* 我是Mid的非静态代码块
* 我是Mid的无参构造器
* 我是left的非静态代码块
* 我是left的无参构造器

结果

下面的输出是:

class FatherTest {
static {
System.out.println("111111");
} {
System.out.println(22222);
} public FatherTest() {
System.out.println(33333);
}
} public class SonTest extends FatherTest { static {
System.out.println("44444444");
} {
System.out.println("55555555");
} public static void main(String[] args) {
System.out.println("777777777");
System.out.println("**********");
new SonTest();
System.out.println("+++++++++++");
new SonTest();
System.out.println("========");
new FatherTest(); }
}

结果:

111111
44444444
777777777
**********
22222
33333
55555555
+++++++++++
22222
33333
55555555
========
22222
33333

main()和代码块的更多相关文章

  1. 静态代码块,构造代码块,main()

    静态代码块 随Class 加载而加载,为Class 作初始化: 在main() 之前加载: 只执行一次: 构造代码块 随对象的创建而加载,为对象作初始化 public class day04 { pu ...

  2. 关于java中普通代码块、构造代码块与静态代码块

    1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现”{普通代码的执行语句}“的就称为普通代码块. *普通 ...

  3. Java基础之数据类型、内存、修饰符、代码块

    Java 数据类型 基本数据类型 数值:int.short.long 字符:char 布尔:boolean 引用数据类型 class(类) interface(接口) 数组[] 所占字节数(1 byt ...

  4. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  5. 黑马程序员——JAVA基础之主函数main和静态static,静态代码块

    ------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...

  6. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  7. 【Java面试题】16 静态代码块,main方法,构造代码块,构造方法

    public class HelloB extends HelloA{ public HelloB() { System.out.println("HelloB"); } { Sy ...

  8. this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系

    this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...

  9. java子父类初始化顺序 (1)父类静态代码块(2)父类静态变量初始化(3)子类静态代码块(4)子类静态变量初始化(5)main(6)有对象开辟空间都为0(7)父类显示初始化(8)父类构造(9)子类显示初始化(10)子类构造

    标题 静态代码块与静态成员变量还要看代码的先后顺序 看程序,说出结果 结果为: x=0 看程序,说出结果 结果如下: 补充 : 静态代码块:static{ } 在JVM加载时即执行,先于主方法执行,用 ...

随机推荐

  1. soj#551 loj#2833 帐篷

    传送门 分析 dp[i][j]表示考虑了i行j列的方案数 我们每次考虑三种情况: 一个点自己放 两个点在同一行 两个点在同一列 代码 #include<bits/stdc++.h> usi ...

  2. Map-Amap:目录

    ylbtech-Map-Amap:目录 1. 高德地图返回顶部 1. https://www.amap.com/ 2. 2.  高德地图App返回顶部 1. http://www.autonavi.c ...

  3. 高并发之CAS机制和ABA问题

    什么是CAS机制 CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换 CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B. 看如下几个例子: pac ...

  4. Oracle 11g 体系结构 --SGA PGA 前后台进程

    Oracle服务器主要由实例.数据库.程序全局区.前台进程 实例:用来提供管理数据库的功能 数据库:由Oracle数据库文件组成,用来存储系统数据 ;一般有:数据文件.控制文件.重做日志文件 而实例可 ...

  5. 第一步:卸载手机上的“WIFI万能钥匙”! 会分享自己家的wifi

    http://www.znds.com/tv-164866-1-1.html 楼主今日家中WIFI卡的不行,心想,20M的电信光纤没理由这么卡!于是就在网上查找了许多资料,接下来统一收集整理给大家!第 ...

  6. 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧

    实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...

  7. pyppeteer模块的基本使用

    pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...

  8. css设置图片的高等于图片的高

    <div class="box"> <img src="img/2222.jpg" /> </div> .box { pos ...

  9. Ptyhon变量,常量,注释

    变量的命名规则: 1.变量由字母,数字,下划线搭配而成 2.变量不能以数字开头 3.变量也不能是Python的关键字. 4.变量不要有中文 5.名字要有意义 6.名字不要太长 变量的两种命名方式: 1 ...

  10. python opencv 生成验证码

    基本思路是使用opencv来把随机生成的字符,和随机生成的线段,放到一个随机生成的图像中去. 虽然没有加复杂的形态学处理,但是目前看起来效果还不错 尝试生成1000张图片,但是最后只有998张,因为有 ...