理解main()方法的语法
package com.atguigu.java2;
public class MainTest {
public static void main(String[] args) {
Main.main(new String[100]);
MainTest test = new MainTest();
test.show();
}
public void show(){
}
}
class Main{
public static void main(String[] args) {
for(int i = 0;i < args.length;i++){
args[i] = "args_" + i;
System.out.println(args[i]);
}
}
}
main()方法可以作为我们与控制台交互的方式。(之前:使用Scanner)
1、用例代码
public class MainDemo {
public static void main(String[] args) {
for(int i = 0;i < args.length;i++){
System.out.println("*****" + args[i]);
int num = Integer.parseInt(args[i]);
System.out.println("#####" + num);
}
}
}
2、传参步骤
2.1 idea操作方法
往String [] arge里传参,先编译,再点编辑配置。 再在程序参数那填 想填的参数(String 类型加不加引号都可以) 最后运行 结果:
2.2 命令行操作方法
类中代码块结构的使用
package com.atguigu.java3;
public class BlockTest {
public static void main(String[] args) {
String desc = Person.desc;
System.out.println(desc);
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1.age);
Person.info();
}
}
class Person{
String name;
int age;
static String desc = "我是一个人";
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
{
System.out.println("hello, block - 2");
}
{
System.out.println("hello, block - 1");
age = 1;
eat();
desc = "我是一个爱学习的人1";
info();
}
static{
System.out.println("hello,static block-2");
}
static{
System.out.println("hello,static block-1");
desc = "我是一个爱学习的人";
info();
}
public void eat(){
System.out.println("吃饭");
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public static void info(){
System.out.println("我是一个快乐的人!");
}
}
一个小知识
代码块的课后练习
静态代码块的执行先于构造器,,静态代码块先于非静态代码块,非静态代码块也先于构造器。
class Root{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root(){
super();
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid(){
super();
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg){
this();
System.out.println("Mid的带参数构造器,其参数值:"
+ msg);
}
}
class Leaf extends Mid{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf(){
super("尚硅谷");
System.out.println("Leaf的构造器");
}
}
public class LeafTest{
public static void main(String[] args){
new Leaf();
System.out.println();
new Leaf();
}
}
结果
一个例题试练
class Father {
static {
System.out.println("11111111111");
}
{
System.out.println("22222222222");
}
public Father() {
System.out.println("33333333333");
}
}
public class Son extends Father {
static {
System.out.println("44444444444");
}
{
System.out.println("55555555555");
}
public Son() {
System.out.println("66666666666");
}
public static void main(String[] args) {
System.out.println("77777777777");
System.out.println("************************");
new Son();
System.out.println("************************");
new Son();
System.out.println("************************");
new Father();
}
}
结果
属性赋值的先后顺序
public class OrderTest {
public static void main(String[] args) {
Order order = new Order();
System.out.println(order.orderId);
}
}
class Order{
int orderId = 3;
{
orderId = 4;
}
}
final关键字
代码知识点总结
package com.atguigu.java3;
public class FinalTest {
final int WIDTH = 0;
final int LEFT;
final int RIGHT;
{
LEFT = 1;
}
public FinalTest(){
RIGHT = 2;
}
public FinalTest(int n){
RIGHT = n;
}
public void doWidth(){
}
public void show(){
final int NUM = 10;
}
public void show(final int num){
System.out.println(num);
}
public static void main(String[] args) {
int num = 10;
num = num + 5;
FinalTest test = new FinalTest();
test.show(10);
}
}
final class FinalA{
}
class AA{
public final void show(){
}
}
class BB extends AA{
}
final笔试题
题1: return ++x;这个不行,因为它改变x的值了, return x+1;这个可以,因为它没改变x的值,只是返回了x+1那个数的值。
题2: 这样是对的,final修饰的o , o别重新赋值就行,i是变量,可以重新赋值。 如果把加入图中绿色 o=new Other();,就出错的,因为相当于重新给 o 赋值了,违背了final。
|